(Есть) Преимущества Python socketserver над обычным объектом сокета?

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

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

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

спасибо!!!

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

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

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

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

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

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

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

(И как вы знаете?)

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

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

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

Спасибо всем!

JSH


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

Ответ 1

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

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

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

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