Найти - Пользователи
Полная версия: Эдакая сообщалка на питоне. Как лучше сделать?
Начало » Python для экспертов » Эдакая сообщалка на питоне. Как лучше сделать?
1 2
FoxPython
Требуется написать такую программку:
На основном компьютере (пусть он зовётся сервером, хотя именно сервером ему быть совсем не обязательно) сидит текстовый файлик в который собираются сообщения с других компьютеров.
Т.е. есть компьютерная сеть из нескольких машин.
Нужно:
На каждом компьютере сидит питон-программка выдающая фрейм с текстконтролем в котором появляются сообщения.
Так же в эту питон-программку, в вернее в её GUI можно писать свои сообщения и отсылать на всеобщее обозрение.
Эдакий чат.

Я совершенно не зная как лучше это сделать для начала решил сделать так:
Питон-программки самостоятельно периодически смотрят на файлик с текстом (на сетевом диске) проверяют его последнюю дату изменения и если она не совпадает с предварительно сохранённой в каждом конкретном комп-е датой последнего изменения этого файла, то считать из него новую информацию и выдать на текстконтроль.

Но, так получается, что все машины будут постоянно лезть к сетевому диску и мучить ж.д. центрального комп-а дабы проверить последнюю версию этого файлика. Мне что-то кажется, что это не хорошо так.

Лучше бы программка на центральном компе при изменении этого файлика (появлении новых сообщений) отсылала бы некий сигнал в общую сеть, уловив который остальные компы уж тогда бы и считывали бы данные из файлика.

Кто-нибудь что-нибудь подскажет?
balu
Подними жаббер, например.
j2a
Хаха. Привычка к файл-серверной модели?

Лучше так: клиенты коннектятся к серверу и посылают/принимают от него данные :)
FoxPython
По ходу меня не поняли.
Я не знаю кто такой жаббер и с чем его едят.
Всё что я на данный момент могу сделать: питон-программка-клиент просто напросто с определённой периодичностью (допустим раз в две минуты) лезет к текстовому файлику на центральном компе, проверяет его последнюю дату модификации и сравнивает её с предварительно сохранённой на собственном компе. Если даты различны, значит новая дата модификации файла записывается куда-нибудь в локальный текстовый файлик и данные из текстового файлика на центральном компе (сетевом диске) считываются для вывода пользователю. Усё. Т.е. как максимум две минуты может пройти от действительного появления нового сообщения, до его показа клиенту.
В основном программа будет использована вовсе не для чата, а для оповещения всех компьютеров сети новостями так сказать, типа: “товарищ Пользователев пройдите к директору” или “сегодня обеда не будет!” Набираться эти сообщения будут с одного компьютера, а видеть должны все остальные.

Никакие серверные “махинации” с сервером мне не доступны. Я всего лишь начинающий питон-программист-любитель. Хотя бы подскажите имеет ли право на существование предложенный мною способ или лучше это делать как-то по другому. В какую сторону хоть глядеть, на что обратить внимание, какие учебники и по какому предмету покачать.
balu
FoxPython
Я не знаю кто такой жаббер и с чем его едят.
На гугле или википеии забанили? http://ru.wikipedia.org/wiki/Jabber
FoxPython
Всё что я на данный момент могу сделать

Хотя бы подскажите имеет ли право на существование предложенный мною способ
Это называется “изобретение велосипеда”. Причем далеко не лучшего.
FoxPython
В основном программа будет использована вовсе не для чата, а для оповещения всех компьютеров сети

Никакие серверные “махинации” с сервером мне не доступны.
А как это сеть и без сервера <:-O? Заодно на жаберного клиента можно и удаленного администратора прикрутить ;-).
iar
FoxPython
В основном программа будет использована вовсе не для чата, а для оповещения всех компьютеров сети новостями так сказать, типа: “товарищ Пользователев пройдите к директору” или “сегодня обеда не будет!” Набираться эти сообщения будут с одного компьютера, а видеть должны все остальные.
У Вас винда? Тогда гуглите netsend.

Под юниксы не интересовался как сделать. Но думаю есть готовые решения.

Если непременно хочется на питоне что нибудь наваять, то гуглите в строну UDP Broadcast
FoxPython
iar
то гуглите в строну UDP Broadcast
Погуглим.

balu
А как это сеть и без сервера
одноранговая сеть


Остальным: Мне неинтересно готовое, мне интересно своё состряпать.
balu
FoxPython
одноранговая сеть
Вот на машину, которая раздает айпишники поставь тот же жабер.
FoxPython
Мне неинтересно готовое, мне интересно своё состряпать.
Так бы сразу и сказал, что играешся…
Yurietc
А почему не сделать наоборот - пусть одна программа на главном компе следит за файлом и маякует всем остальным.
Вот пример кода, взятый из Марк Лутц “Программирование на 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()
сервер - рограмма, которая слушает, и делает что-то в ответ
клиент - рограмма, которая обращается к серверу
В твоем случае нужно комбинировать клиент и сервер, правильно прописать хосты и порты.
Помни - тебя ждет долгая и жестокая война со всевозможными фаерволами, антивирусами и другими чудовищами из иных миров. И да прибудет с тобой СИЛА !
FoxPython
Yurietc
Вот спасибо! Теперь знаю с какого краю хоть подходить к “проблеме”.

П.С. Сперва прочитал так: "следит за файлом и мЯУкает всем остальным" :) :)

Yurietc
Да наполнится песком рот дающего советы…
Это ещё зачем? А мне Ваш совет очень пригодился. Не надо песка! ;)

П.П.С. Файерволы мы заборем!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB