Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 17, 2007 05:36:20

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

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

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

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

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

Кто-нибудь что-нибудь подскажет?



Офлайн

#2 Дек. 17, 2007 08:53:17

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

Подними жаббер, например.



Офлайн

#3 Дек. 17, 2007 08:54:29

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

Хаха. Привычка к файл-серверной модели?

Лучше так: клиенты коннектятся к серверу и посылают/принимают от него данные :)



Офлайн

#4 Дек. 17, 2007 11:02:32

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

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

Никакие серверные “махинации” с сервером мне не доступны. Я всего лишь начинающий питон-программист-любитель. Хотя бы подскажите имеет ли право на существование предложенный мною способ или лучше это делать как-то по другому. В какую сторону хоть глядеть, на что обратить внимание, какие учебники и по какому предмету покачать.



Офлайн

#5 Дек. 17, 2007 11:10:01

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

FoxPython
Я не знаю кто такой жаббер и с чем его едят.
На гугле или википеии забанили? http://ru.wikipedia.org/wiki/Jabber
FoxPython
Всё что я на данный момент могу сделать

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

Никакие серверные “махинации” с сервером мне не доступны.
А как это сеть и без сервера <:-O? Заодно на жаберного клиента можно и удаленного администратора прикрутить ;-).



Отредактировано (Дек. 17, 2007 11:10:33)

Офлайн

#6 Дек. 17, 2007 11:49:52

iar
От:
Зарегистрирован: 2007-12-17
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

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

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

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



Офлайн

#7 Дек. 17, 2007 13:06:24

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

iar
то гуглите в строну UDP Broadcast
Погуглим.

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


Остальным: Мне неинтересно готовое, мне интересно своё состряпать.



Офлайн

#8 Дек. 17, 2007 13:23:43

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

FoxPython
одноранговая сеть
Вот на машину, которая раздает айпишники поставь тот же жабер.
FoxPython
Мне неинтересно готовое, мне интересно своё состряпать.
Так бы сразу и сказал, что играешся…



Отредактировано (Дек. 17, 2007 13:33:40)

Офлайн

#9 Дек. 17, 2007 13:50:09

Yurietc
От:
Зарегистрирован: 2007-07-18
Сообщения: 112
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

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



Офлайн

#10 Дек. 17, 2007 13:57:40

FoxPython
От:
Зарегистрирован: 2007-09-15
Сообщения: 71
Репутация: +  0  -
Профиль   Отправить e-mail  

Эдакая сообщалка на питоне. Как лучше сделать?

Yurietc
Вот спасибо! Теперь знаю с какого краю хоть подходить к “проблеме”.

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

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

П.П.С. Файерволы мы заборем!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version