[Pythonjp-checkins] [python-doc-ja] push by songo****@gmail***** - Update 2.7.2: asyncore on 2011-11-05 18:55 GMT

Zurück zum Archiv-Index

pytho****@googl***** pytho****@googl*****
2011年 11月 6日 (日) 03:56:34 JST


Revision: 6ae9dd44b69e
Author:   Naoki INADA  <inada****@klab*****>
Date:     Sat Nov  5 11:55:18 2011
Log:      Update 2.7.2: asyncore
http://code.google.com/p/python-doc-ja/source/detail?r=6ae9dd44b69e

Modified:
  /library/asyncore.rst

=======================================
--- /library/asyncore.rst	Sun Mar 20 16:10:43 2011
+++ /library/asyncore.rst	Sat Nov  5 11:55:18 2011
@@ -184,10 +184,14 @@

     .. method:: accept()

-   接続を受け入れます。ソケットはアドレスにバインド済みであ 
り、 :meth:`listen`
-   で接続待ち状態でなければなりません。
-   戻り値は ``(conn, address)`` のペアで、 *conn* はデータの送受信を行うソ 
ケットオブジェクト、
-   *address* は接続先ソケットがバインドされているアドレスです。
+      接続を受け入れます。
+      ソケットはアドレスにバインド済みであり、 :meth:`listen`
+      で接続待ち状態でなければなりません。
+      戻り値は ``None`` か ``(conn, address)`` のペアで、
+      *conn* はデータの送受信を行う **新しい** ソケットオブジェクト、
+      *address* は接続先ソケットがバインドされているアドレスです。
+      ``None`` が返された場合、接続が起こらなかったことを意味します。
+      その場合、サーバーはこのイベントを無視して後続の接続を待ち続けるべき 
です。


     .. method:: close()
@@ -198,6 +202,12 @@
        ソケットはガベージコレクト時に自動的にクローズされます。


+.. class:: dispatcher_with_send()
+
+   :class:`dispatcher` のサブクラスで、シンプルなバッファされた出力を持ちま 
す。
+   シンプルなクライアントプログラムに適しています。
+   もっと高レベルな場合には :class:`asynchat.async_chat` を利用してくださ 
い。
+
  .. class:: file_dispatcher()

     file_dispatcher はファイルディスクリプタかファイルオブジェクトとオプショ 
ンとして
@@ -217,7 +227,7 @@
     利用できるプラットフォーム: UNIX


-.. _asyncore-example:
+.. _asyncore-example-1:

  asyncoreの例:簡単なHTTPクライアント
  ------------------------------------
@@ -227,7 +237,7 @@

     import asyncore, socket

-   class http_client(asyncore.dispatcher):
+   class HTTPClient(asyncore.dispatcher):

         def __init__(self, host, path):
             asyncore.dispatcher.__init__(self)
@@ -251,6 +261,45 @@
             sent = self.send(self.buffer)
             self.buffer = self.buffer[sent:]

-   c = http_client('www.python.org', '/')
-
+   client = HTTPClient('www.python.org', '/')
     asyncore.loop()
+
+.. _asyncore-example-2:
+
+基本的な echo サーバーの例
+----------------------------------
+
+この例の基本的な echoサーバーは、 :class:`dispatcher` を利用して接続を受け 
つけ、
+接続をハンドラーにディスパッチします。 ::
+
+    import asyncore
+    import socket
+
+    class EchoHandler(asyncore.dispatcher_with_send):
+
+        def handle_read(self):
+            data = self.recv(8192)
+            if data:
+                self.send(data)
+
+    class EchoServer(asyncore.dispatcher):
+
+        def __init__(self, host, port):
+            asyncore.dispatcher.__init__(self)
+            self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
+            self.set_reuse_addr()
+            self.bind((host, port))
+            self.listen(5)
+
+        def handle_accept(self):
+            pair = self.accept()
+            if pair is None:
+                pass
+            else:
+                sock, addr = pair
+                print 'Incoming connection from %s' % repr(addr)
+                handler = EchoHandler(sock)
+
+    server = EchoServer('localhost', 8080)
+    asyncore.loop()
+




Pythonjp-checkins メーリングリストの案内
Zurück zum Archiv-Index