del3d
Апрель 27, 2010 14:58:52
Добрые сутки товарищи…
Пытаюсь понять как работают клиент-серверные приложения на примере чата.
Вопрос 1: Стоит ли использовать отдельный поток для каждого подключения или можно обойтись вообще без потоков или как?
Вопрос 2: Подключение к серверу должно быть постоянным или только в момент отправки сообщения?
regall
Апрель 27, 2010 15:07:10
Отличная статья как введение в сокеты на Python - от основ до создания многопоточного эхо-сервера, думаю именно то, что вам сейчас нужно:
http://www.devshed.com/c/a/Python/Sockets-in-Python-Into-the-World-of-Python-Network-Programming/del3d
Вопрос 2: Подключение к серверу должно быть постоянным или только в момент отправки сообщения?
В зависимости от используемого стека протоколов, например TCP/IP - постоянное соединение, UPD/IP - отправка датаграмм без подключения, для LAN-чата пойдет.
o7412369815963
Апрель 27, 2010 17:24:49
необязательно на tcp/ip делать постоянное соединение, в вебе например в основном используется непостоянное. + о разрывах меньше думать.
я бы чат наверно на xmlRPC сделал т.к. это бысто и просто…
del3d
Апрель 28, 2010 10:24:15
Спасибо, прочитал.. кое что понял..
Создаю для каждого подключения поток, подключение постоянное..
igor.kaist
Апрель 28, 2010 10:42:24
del3d
Создаю для каждого подключения поток, подключение постоянное..
эээ… зачем поток…
Когда то решал подобную проблему. Остановился на реализации на select. Все очень просто. Помог вот этот пример сервера и клиента:
http://code.activestate.com/recipes/531824-chat-server-client-using-selectselect/Минут 20 помедитировал над этим кодом, и наступило просветление….
pioner
Апрель 28, 2010 12:11:52
1. “на потоках” (синхронный сервер) и без них (асинхронный) - это две разные реализации. От задачи зависит и быстродействие и метод реализации.
2. Если разрывать соединение, то надо писать промежуточные данные в файл (в базу), потом по id авторизоваться и получать что на ваш id пришло. Для быстрого чата (напр. игрового) неподойдет.
Андрей Светлов
Апрель 28, 2010 16:02:45
pioner, не нужно никуда писать. Вы, кажется, забыли - у каждого современного компьютера есть несколько гигабайтов оперативной памяти.
pioner
Апрель 28, 2010 18:02:59
Андрей Светлов, не нужно еще забывать, что сервера падают или процесс вылетит.
o7412369815963
Апрель 28, 2010 18:50:22
pioner
Андрей Светлов, не нужно еще забывать, что сервера падают или процесс вылетит.
лихие 90-ые прошли.
я на работе год назад приложение разместил, ещё ни разу не падало
pioner
Апрель 28, 2010 19:27:48
На самом деле, топикстартер ничего не спросил. Его вопрос звучит так - каким из двух возвожных методов построить чат. Про нагрузку и пр. ничего. Тут есть реальный сисадмин? Этот вопрос к нему.
90-е прошли. 2 года назад на форуме сисадминов перевес был на стороне постоянного соединения.
Еще - а) если разместиться на виртуальном хосте, а не на работе, где администратор может просто перегрузить сервер. 2) на таком сервере вам отводится какой-то процент всех ресурсов (к вопросу о памяти), при превышении которого вас просят переходить на другой тариф (встречал такое).