Неблокирующий сервер в Python - PullRequest
0 голосов
/ 04 октября 2009

Может кто-нибудь подсказать, как написать неблокирующий код сервера, используя только библиотеку сокетов. Спасибо

Ответы [ 4 ]

5 голосов
/ 04 октября 2009

Честно говоря, просто не надо (если только это не упражнение). Twisted Framework сделает все, что связано с сетью, поэтому вы должны писать только свой протокол, не заботясь о транспортном уровне. Написание кода на сокете не так просто, так почему бы не использовать код, который кто-то еще написал и протестировал.

2 голосов
/ 04 октября 2009

Почему socket один? , поэтому намного проще использовать другой стандартный библиотечный модуль, asyncore - а если нет, то по очень минимум select!

Если вы ограничены состоянием вашей домашней работы только для использования socket, то я надеюсь, что вы можете хотя бы добавить threading (или multiprocessing), в противном случае вы серьезно из удача - вы можете создавать сокеты с timeout, но манипулирование сокетами тайм-аута без необходимой помощи любого из других очевидных стандартных модулей библиотеки (для поддержки асинхронного или потокового обслуживания) является серьезным беспорядком на самом деле, у ...; -.)

0 голосов
/ 19 февраля 2011

Используйте eventlets или gevent. Это обезьяна исправляет существующие библиотеки. Модуль сокета может быть использован без каких-либо изменений. Хотя код выглядит синхронным, он выполняется асинхронно.

Пример: http://eventlet.net/doc/examples.html#socket-connect

0 голосов
/ 04 октября 2009

Не уверен, что вы подразумеваете под "библиотекой сокетов" - вам наверняка потребуются другие модули из стандартной библиотеки Python.

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

...