使用python asyncore从socket读取固定数量的字节

时间:2010-08-14 20:28:54

标签: python sockets asyncore

我使用asyncore使用“length:message”类型协议与远程服务器通信。有人可以推荐我一种从套接字读取确切字节数的方法吗?我试图使用handle_read来填充内部缓冲区并每次调用我的函数,检查缓冲区的大小,但它看起来太难看了(检查缓冲区是否足够长以读取长度,检查缓冲区长度是否大于消息长度,读取消息等...)。是否有可能像“socket.read(bytes)”这样的东西会一直睡到缓冲区充满并返回值?

1 个答案:

答案 0 :(得分:1)

没有。睡眠会破坏异步IO的整个目的。

但是,使用twisted非常简单。

from twisted.protocols.basic import Int32StringReceiver

class YourProtocol(Int32StringReceiver):
    def connectionMade(self):
        self.sendString('This string will automatically have its length '
            'prepended before it\'s sent over the wire!')

    def stringReceived(self, string):
        print ('Received %r, which came in with a prefixed length, but which '
            'has been stripped off for convenience.' % (string,))