Форум сайта python.su
Требуется написать такую программку:
На основном компьютере (пусть он зовётся сервером, хотя именно сервером ему быть совсем не обязательно) сидит текстовый файлик в который собираются сообщения с других компьютеров.
Т.е. есть компьютерная сеть из нескольких машин.
Нужно:
На каждом компьютере сидит питон-программка выдающая фрейм с текстконтролем в котором появляются сообщения.
Так же в эту питон-программку, в вернее в её GUI можно писать свои сообщения и отсылать на всеобщее обозрение.
Эдакий чат.
Я совершенно не зная как лучше это сделать для начала решил сделать так:
Питон-программки самостоятельно периодически смотрят на файлик с текстом (на сетевом диске) проверяют его последнюю дату изменения и если она не совпадает с предварительно сохранённой в каждом конкретном комп-е датой последнего изменения этого файла, то считать из него новую информацию и выдать на текстконтроль.
Но, так получается, что все машины будут постоянно лезть к сетевому диску и мучить ж.д. центрального комп-а дабы проверить последнюю версию этого файлика. Мне что-то кажется, что это не хорошо так.
Лучше бы программка на центральном компе при изменении этого файлика (появлении новых сообщений) отсылала бы некий сигнал в общую сеть, уловив который остальные компы уж тогда бы и считывали бы данные из файлика.
Кто-нибудь что-нибудь подскажет?
Офлайн
Подними жаббер, например.
Офлайн
Хаха. Привычка к файл-серверной модели?
Лучше так: клиенты коннектятся к серверу и посылают/принимают от него данные :)
Офлайн
По ходу меня не поняли.
Я не знаю кто такой жаббер и с чем его едят.
Всё что я на данный момент могу сделать: питон-программка-клиент просто напросто с определённой периодичностью (допустим раз в две минуты) лезет к текстовому файлику на центральном компе, проверяет его последнюю дату модификации и сравнивает её с предварительно сохранённой на собственном компе. Если даты различны, значит новая дата модификации файла записывается куда-нибудь в локальный текстовый файлик и данные из текстового файлика на центральном компе (сетевом диске) считываются для вывода пользователю. Усё. Т.е. как максимум две минуты может пройти от действительного появления нового сообщения, до его показа клиенту.
В основном программа будет использована вовсе не для чата, а для оповещения всех компьютеров сети новостями так сказать, типа: “товарищ Пользователев пройдите к директору” или “сегодня обеда не будет!” Набираться эти сообщения будут с одного компьютера, а видеть должны все остальные.
Никакие серверные “махинации” с сервером мне не доступны. Я всего лишь начинающий питон-программист-любитель. Хотя бы подскажите имеет ли право на существование предложенный мною способ или лучше это делать как-то по другому. В какую сторону хоть глядеть, на что обратить внимание, какие учебники и по какому предмету покачать.
Офлайн
FoxPythonНа гугле или википеии забанили? http://ru.wikipedia.org/wiki/Jabber
Я не знаю кто такой жаббер и с чем его едят.
FoxPythonЭто называется “изобретение велосипеда”. Причем далеко не лучшего.
Всё что я на данный момент могу сделать
…
Хотя бы подскажите имеет ли право на существование предложенный мною способ
FoxPythonА как это сеть и без сервера <:-O? Заодно на жаберного клиента можно и удаленного администратора прикрутить ;-).
В основном программа будет использована вовсе не для чата, а для оповещения всех компьютеров сети
…
Никакие серверные “махинации” с сервером мне не доступны.
Отредактировано (Дек. 17, 2007 11:10:33)
Офлайн
FoxPythonУ Вас винда? Тогда гуглите netsend.
В основном программа будет использована вовсе не для чата, а для оповещения всех компьютеров сети новостями так сказать, типа: “товарищ Пользователев пройдите к директору” или “сегодня обеда не будет!” Набираться эти сообщения будут с одного компьютера, а видеть должны все остальные.
Офлайн
iarПогуглим.
то гуглите в строну UDP Broadcast
baluодноранговая сеть
А как это сеть и без сервера
Офлайн
FoxPythonВот на машину, которая раздает айпишники поставь тот же жабер.
одноранговая сеть
FoxPythonТак бы сразу и сказал, что играешся…
Мне неинтересно готовое, мне интересно своё состряпать.
Отредактировано (Дек. 17, 2007 13:33:40)
Офлайн
А почему не сделать наоборот - пусть одна программа на главном компе следит за файлом и маякует всем остальным.
Вот пример кода, взятый из Марк Лутц “Программирование на Python, 2-е издание” :
Сервер :
from socket import * Hostnamee = '' usedPort = 8833 sockobj = socket(AF_INET, SOCK_STREAM) sockobj.bind((Hostnamee, usedPort)) sockobj.listen(5) while 1: connection, address = sockobj.accept() print 'Hello ', address while 1: data = connection.recv(1024) if not data: break connection.send('You said ' + data) connection.close()
from socket import * servHost = 'localhost' servPort = 8833 message = ['hello, idle'] sockobj = socket(AF_INET, SOCK_STREAM) sockobj.connect((servHost, servPort)) i = 1 while i < 20000: sockobj.send('hello, idle') data = sockobj.recv(1024) print 'reseived : ', data i = i+1 sockobj.close()
Офлайн
Yurietc
Вот спасибо! Теперь знаю с какого краю хоть подходить к “проблеме”.
П.С. Сперва прочитал так: "следит за файлом и мЯУкает всем остальным" :) :)
YurietcЭто ещё зачем? А мне Ваш совет очень пригодился. Не надо песка! ;)
Да наполнится песком рот дающего советы…
Офлайн