繁体   English   中英

python asyncore客户端示例

[英]python asyncore client example

我试图在python中实现为异步TCP客户端-服务器模型。 这是我使用asyncore模块的第一个示例,如果有人可以提供我,我需要一些解释。

我有以下要求:[客户]

  1. 初始化客户端实例-如果服务器正在运行,请连接到服务器,否则请等待服务器启动。
  2. 我需要从服务器接收/传输数据。
  3. 每当套接字上收到数据时通知我。

我尝试从网上运行一个示例示例,但有一些疑问:

import asyncore
import logging
import socket
from cStringIO import StringIO
import urlparse

class Client(asyncore.dispatcher):

    def __init__(self,host):
        self.logger = logging.getLogger()
        self.write_buffer = ""
        self.read_buffer = StringIO()
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        address = (host, 80)
        self.logger.debug('connecting to %s', address)
        self.connect(address)

    def handle_connect(self):
        self.logger.debug('handle_connect()')

    def handle_close(self):
        self.logger.debug('handle_close()')
        self.close()

    def writable(self):
        is_writable = (len(self.write_buffer) > 0)
        if is_writable:
            self.logger.debug('writable() -> %s', is_writable)
        return is_writable

    def readable(self):
        self.logger.debug('readable() -> True')
        return True

    def handle_write(self):
        sent = self.send(self.write_buffer)
        self.logger.debug('handle_write() -> "%s"', self.write_buffer[:sent])
        self.write_buffer = self.write_buffer[sent:]

    def handle_read(self):
        data = self.recv(8192)
        self.logger.debug('handle_read() -> %d bytes', len(data))
        self.read_buffer.write(data)

if __name__ == '__main__':
    logging.basicConfig(level=logging.DEBUG,
                        format='%(name)s: %(message)s',
                        )

    clients = Client("127.0.0.1")

    logging.debug('LOOP STARTING')

    asyncore.loop()

    logging.debug('LOOP DONE')
  1. 调度程序类如何通知何时可以从套接字读取数据。 在这种情况下会调用handle_read吗?
  2. 它是繁忙的轮询机制吗? 即使套接字闲置,它也会吞噬我的整个CPU吗?
  3. 上面的示例不等待服务器启动。 怎么办呢?
  4. 如何从客户端向套接字写入数据?

我知道这很老了,但也许对某人有用:

http://effbot.org/librarybook/asyncore.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM