(Есть ли) ПРОИЗВОДИТЕЛЬНОСТЬ преимущества сокет-сервера python по сравнению с обычным объектом сокета?

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

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

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

Благодарность!!!

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

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

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

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

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

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

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

(И откуда ты знаешь?)

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

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

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

спасибо народ!

джш


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


person jsh    schedule 30.06.2011    source источник
comment
Это мини-фреймворк. Twisted — полноценный фреймворк. Да, они построены друг над другом. Модуль socket в Python — это всего лишь оболочка собственного интерфейса сокетов ОС (WinSock, BSD Socket и т. д.). Любое сетевое приложение, будь то на Python или C++, скорее всего, будет использовать этот интерфейс. И поскольку socket в Python является оболочкой для этого, и socketserver, и Twisted используют его.   -  person Santa    schedule 01.07.2011
comment
socketserver является синхронным, если вы не смешиваете возможность разветвления или потокового процесса. Twisted является асинхронным, но обычно обрабатывает его, используя что-то вроде select или epoll, где вы не позволяете блокировать сокеты, а затем обрабатываете сокеты, когда они готовы для записи или чтения. Я считаю, что в Twisted есть возможность использовать многопоточность, но гораздо проще использовать ее без потоков. Так что я очень сомневаюсь, что Twisted использует socketserver.   -  person Tim Tisdall    schedule 05.01.2013


Ответы (1)


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

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

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

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

person ascobol    schedule 04.07.2011