(Есть ли) ВЫСОКОПРОИЗВОДИТЕЛЬНЫЕ преимущества python socketserver по сравнению с обычным сокетным объектом? - PullRequest
10 голосов
/ 30 июня 2011

спасибо за интересные ответы до сих пор.В свете этих ответов я немного изменил свой вопрос.

думаю, что мне действительно нужно знать, так это сокет-сервер, в отличие от библиотеки сокетов с прямым циклом, предназначенной для обработки как периодов задержки, так и нагрузки, т. Е. имеет ли она дополнительные механизмы или функции, которые оправдывают егонеявно объявляется статус «сервер», или его просто немного проще использовать?

каждый, похоже, рекомендует socketserver, но я до сих пор не совсем понимаю, почему, в отличие от сокета.

спасибо !!!

Я построил некоторые серверные программы на python на основе стандартной библиотеки сокетов http://docs.python.org/library/socket.html

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

Оглядываясь вокруг, я увидел, что python также предоставляет библиотеку сокет-сервера - http://docs.python.org/library/socketserver.html

Библиотека socket предоставляет возможность прослушивать несколько соединений, как правило, до 5.

Согласно странице socketserver , его службы являются синхронными, то есть блокирующими, но можно поддерживать асинхронное поведение с помощью потоков.Я заметил, что у него есть возможность поддерживать очередь запросов со значением по умолчанию до 5 запросов ... так что, может быть, нет большой разницы.

Я также читал, что Twisted запускает сокет-сервер под капотом.Хотя я бы предпочел не попадать в чудовище размером с Twisted, если оно не будет стоить.

, поэтому мой вопрос: является ли сервер-сокет более надежным, чем сокет? Если это так, то почему?

(А как вы узнали?)

кстати, сокет-сервер построен поверх сокета python или он полностью отдельный?

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

О, и я говорюPython 2.x, а не 3.x здесь, если это имеет значение.

спасибо, ребята!

jsh


Ну, у меня нет технического ответа, но я реализовал SocketServer по рекомендациям людей, и он определенно более надежен.Если кто-нибудь придумает объяснение низкого уровня, пожалуйста, дайте мне знать ... спасибо!

1 Ответ

9 голосов
/ 04 июля 2011

Модуль сокета является модулем очень низкого уровня для отправки и получения пакетов. Как сказано в документации, он «обеспечивает доступ к интерфейсу BSD-сокета».

Если вы хотите что-то более сложное, есть «сервер сокетов», который позаботится о мрачных деталях для вас, , но это все еще относительно низкий уровень.

Кроме того, вы можете найти HTTP-сервер с CGI или без него, XML-RPC-сервер и т. Д. Это frameworks , что обычно означает, что их код вызывает ваш код. Это делает вещи проще, потому что вам нужно просто заполнить некоторые «пробелы», чтобы иметь полностью работающий сервер, но это также означает, что у вас немного меньше контроля над тем, что он делает.

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

...