Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 26, 2008 15:21:54

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Сервер - структура

Надо сделать чат.
Типа посылается команда нами - сервер принимает. И принимать команды.

Естественно сделать можно через recv(), но оно ждет приема из сокета, а вдруг нам надо в него написать в это время?
Есть вариант с асинхронными сокетами, а есть с потоками.
Что например, если просто в отдельный поток вынести recv и заносить в FIFO-буфер данные в нем?

Кто как делает?



Офлайн

#2 Апрель 26, 2008 15:24:48

redixin
От:
Зарегистрирован: 2006-11-27
Сообщения: 66
Репутация: +  1  -
Профиль   Отправить e-mail  

Сервер - структура

только асинхронные сокеты. twisted вам в помощь



Офлайн

#3 Апрель 26, 2008 16:51:37

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

Сервер - структура

redixin
только асинхронные сокеты. twisted вам в помощь
ну или asyncore/asynchat



Офлайн

#4 Апрель 26, 2008 23:58:45

redixin
От:
Зарегистрирован: 2006-11-27
Сообщения: 66
Репутация: +  1  -
Профиль   Отправить e-mail  

Сервер - структура

j2a
ну или asyncore/asynchat
кстати да, лучше наверное это. ато я както сразу за тяжелую артилерию схватился



Офлайн

#5 Апрель 28, 2008 09:05:25

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Сервер - структура

Т.е. нельзя использовать работу с сокетом из 2х потоков?



Офлайн

#6 Апрель 28, 2008 09:45:22

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

Сервер - структура

nerezus
Т.е. нельзя использовать работу с сокетом из 2х потоков?
Ну вообще, есть три модели: prefork, threaded, async. Можешь использовать любую. (см. напр http://softwaremaniacs.org/blog/2007/01/08/controlled-download-2/ , раздел “Медуза”)



Офлайн

#7 Апрель 28, 2008 11:00:41

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Сервер - структура

j2a
Ну вот вопрос чисто про threaded: можно ли использовать работу с сокетом из 2х потоков? С одним сокетом.
Т.е. количество потоков = количество клиентов * 2.

Впрочем, для приложений на Питоне это не рекомендуется в любом случае из-за Global Interpreter Lock
Эм, немного не понял, в чем оно заключается.



Офлайн

#8 Апрель 28, 2008 17:44:04

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

Сервер - структура

nerezus
Впрочем, для приложений на Питоне это не рекомендуется в любом случае из-за Global Interpreter Lock
Эм, немного не понял, в чем оно заключается.
http://ru.wikipedia.org/wiki/Python#.D0.93.D0.BB.D0.BE.D0.B1.D0.B0.D0.BB.D1.8C.D0.BD.D0.B0.D1.8F_.D0.B1.D0.BB.D0.BE.D0.BA.D0.B8.D1.80.D0.BE.D0.B2.D0.BA.D0.B0_.D0.B8.D0.BD.D1.82.D0.B5.D1.80.D0.BF.D1.80.D0.B5.D1.82.D0.B0.D1.82.D0.BE.D1.80.D0.B0_.28GIL.29



Офлайн

#9 Апрель 29, 2008 04:49:58

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Сервер - структура

j2a
Маленькое дополнение: когда вызывается c extention он может снять GIL. Иногда этим сильно пользовался - и помогало.
socket интенсивно это юзает: посмотри в socketmodule.c на Py_BEGIN_ALLOW_THREADS

Но в общем согласен - не стоит.

Следующий вопрос: кто делает внятное объяснение prefork, threaded, async и GIL?
Или, быть может, знаешь хорошие ссылки? По prefork, threaded, async - уже есть на русском, уверен.

Не очень-то хочется писать большую статью…



Офлайн

#10 Апрель 29, 2008 05:08:06

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Сервер - структура

А было бы интересно… У меня в разработке большой сервер, где каждому клиенту отводится отдельная нить со своим сокетом. Да и эта нить не редко порождает другие… поднити. В сокет запись идёт через очередь, одной нитью.
Проблему маштабирования на несколько ядер я собрался решить запуском нескольких копий, слушающих разные порты для входящих соединений. Благо это не проблема, потому что связаны клиентские нити только СУБД.
Очень интересует вопрос быстродействия этой системы. Серьёзно протестить пока нет возможности.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version