簡體   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