спасибо за интересные ответы до сих пор. В свете указанных ответов я немного изменил свой вопрос.
думаю, мне действительно нужно знать, является ли 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 в соответствии с рекомендациями людей, и он определенно более надежен. Если кто-нибудь когда-нибудь придумает низкоуровневое объяснение, пожалуйста, дайте мне знать... спасибо!
socket
в Python — это всего лишь оболочка собственного интерфейса сокетов ОС (WinSock, BSD Socket и т. д.). Любое сетевое приложение, будь то на Python или C++, скорее всего, будет использовать этот интерфейс. И посколькуsocket
в Python является оболочкой для этого, иsocketserver
, и Twisted используют его. - person Santa   schedule 01.07.2011socketserver
является синхронным, если вы не смешиваете возможность разветвления или потокового процесса. Twisted является асинхронным, но обычно обрабатывает его, используя что-то вродеselect
илиepoll
, где вы не позволяете блокировать сокеты, а затем обрабатываете сокеты, когда они готовы для записи или чтения. Я считаю, что в Twisted есть возможность использовать многопоточность, но гораздо проще использовать ее без потоков. Так что я очень сомневаюсь, что Twisted используетsocketserver
. - person Tim Tisdall   schedule 05.01.2013