2009-10-04 1 views

ответ

0

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

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

2

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

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

5

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

+0

Действительно использовать витую, я однажды написал событие, библиотека на основе сокета себя, это боль в а ... Даже простые вещи, как проверка кастрированный баран соединение было закрыто клиентом или с помощью ошибка может вызвать у вас много неприятностей. Это определенно стоит того, если вы хотите много узнать о том, как работают сокеты, но это много проб и ошибок. –

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^