2011-06-30 6 views
10

これまでの興味深い回答に感謝します。上記の回答に照らして、私は少し質問を変えました。(そこにあります)通常のソケットオブジェクトに比べて、pythonソケットサーバーのパフォーマンス上の利点はありますか?

待ち時間とストレスの両方の時間を処理するように設計されたストレートソケットライブラリとは対照的に、ソケットサーバであることがわかります。暗黙的に宣言された状態を"サーバー"、、またはちょっと使いやすくなっていますか?

誰もがソケットサーバを推奨しているようですが、ソケットとは対照的に、なぜ私はまだ完全にはっきりしていません。

ありがとうございます!

私は、標準ソケット ライブラリ http://docs.python.org/library/socket.html

に基づいて pythonでいくつかのサーバープログラムを構築してきた私は、彼らは傾向を持っている負荷 なしことを除いて うまく働くように見えることに気付きましたしばらくしてから 寝る。私は、これは は生産の問題(他の問題がたくさんあるでしょう間違いなく ) ではないかもしれないと思いますが、私は私はここに仕事のための適切なコードを使用して だかどうかを知りたいと思います。 http://docs.python.org/library/socketserver.html

ソケットライブラリはによると、通常5

まで、複数の 接続をリッスンする 機能を提供 - 私のpythonも socketserverライブラリを提供することを見て周り探し

ソケットサーバページ、 サービスが同期しています。すなわち、 ブロックですが、 スレッドによる非同期動作。 要求キューを維持する能力を持っていることに気付きました。 デフォルト値は最大5要求... 多分それほど大きな違いはありません。

私はまた、Twisted runs socketserverをボンネットの下に読みました。私は は、 に行くつもりがない限り、獣に入るのはむしろ のサイズです。

私の質問は、はソケットサーバ ソケットより堅牢ですか?もしそうなら、なぜですか?

(そして、どのようにあなたが知っているか?)

ちなみに、socketserver Pythonのソケットの 上に構築されたか、それは 完全に分離されていますか?

最後に、ボーナスとして誰もが 標準ソケット「秋眠り」は があまりにもその上でチャイムすること自由に感じなさいという間違ったように何ができるか1 は知っている場合。

ああ、私はpython 2.xをよく話しています。 ここでは3.xよりも の違いがあります。

ありがとうございました!

JSH


まあ、私は技術的な答えを持っていないが、私は人々の推奨あたりSocketServerを実装しました、それは間違いなく、より信頼性があります。もし誰かが低レベルの説明を思いついたら私に教えてください...ありがとう!

+3

ミニフレームワークです。 Twistedはフル・フレームワークです。はい、彼らはお互いの上に建てられています。 Pythonの 'socket'モジュールは、OSのネイティブソケットインタフェース(WinSock、BSDソケットなど)を包むラッパーです。 PythonやC++のネットワークアプリケーションであれば、このインタフェースを使用する可能性が最も高いでしょう。そして、Pythonの 'socket'はそれを囲むラッパーであるため、' socketserver'とTwistedの両方がそれを使用します。 – Santa

+1

'socketserver'は、フォークプロセスまたはスレッドプロセスのいずれかの能力を混在させない限り、同期しています。 Twistedは非同期ですが、通常は 'select'や' epoll'のようなものを使ってソケットをブロックし、書き込みや読み込みの準備が整うソケットをブロックすることはできません。私はTwistedでスレッディングを使用するオプションがあると信じていますが、スレッディングなしで使用する方がはるかに簡単です。ですから、私はTwistedが 'socketserver'を使うことを本当に疑っています。 –

答えて

9

ソケットモジュールは、パケットを送受信するための非常に低レベルのモジュールです。ドキュメントで述べたように、 "BSDソケットインタフェースへのアクセスを提供する"。

もう少し精巧なものが必要な場合は、でものように、細部の詳細を処理する「ソケットサーバー」がありますが、まだ比較的低いレベルです。

さらに、CGIの有無にかかわらずHTTPサーバー、XML-RPCサーバーなどを見つけることができます。これらはフレームワークであり、通常はコードによってコードが呼び出されます。それは完全に機能するサーバーを持つためにいくつかの "ギャップ"を埋めるだけで済むので、作業が簡単になりますが、それが何をするのかを少しは制御しないということも意味します。

socketserverの機能だけが必要な場合は、何らかの理由でホイールを再発明したくない場合や、新しいホイールを設計する理由が常にある場合(たとえば、動作の仕方など)

+1

+1その最後のビット! –

関連する問題