我已经实现了一个简单的服务器 - 客户端脚本,如下所示:
服务器:
class Server(Protocol):
def connectionMade(self):
while True:
self.transport.write('a')
客户端
class Client(Protocol):
def dataReceived(self, data):
print data
我所期待的是在客户端窗口上打印出一串无限的字符串,但实际上,没有出现任何内容。当我使用有限循环替换Server中的while循环时,它可以工作。所以似乎在整个数据出现在客户端之前需要终止函数connectionMade?我错了吗?
答案 0 :(得分:0)
你是对的。只要connectionMade
正在执行操作,尚未将任何数据写入套接字。 transport.write(x)
并不意味着“立即将'x'写入套接字”,这意味着'当套接字有一些空闲的缓冲区空间时,向它写'x'。
这个例子,就像你说的那样:
def connectionMade(self):
while True:
self.transport.write('a')
简单地分配一个充满'a'的无限大缓冲区,分配内存直到它崩溃。