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