我有一个扭曲的TCPServer,它有大量的客户端连接。我需要能够让一个主客户端向该服务器发出命令,以非阻塞方式向所有其他客户端连接发送消息。换句话说,服务器应该有一个命令处理程序(构建在lineReceived之上),它从主客户端获取一个特殊命令,然后启动一个线程或进程来遍历所有其他客户端并向每个客户端发送一个命令(sendLine)这些客户。主客户端的命令处理程序应在启动线程后立即返回。问题是必须从主反应堆线程中调用对twisted中的sendLine的任何调用,因此必须使用callFromThread来完成。因此,我的主命令处理程序可以执行以下操作:
def handle_master_command(self,command):
deferred=reactor.deferToThread(myfunc)
return
def myfunc(self):
for client in other_clients:
reactor.callFromThread(send_stuff_to_client,client,stuff_to_send)
显然这只是伪代码,但是会有这样的工作吗?
答案 0 :(得分:1)
呃,LineReceiver.sendLine()
已经无阻塞;你不需要任何线程,只需:
def handle_master_command(self, command):
for client in other_clients:
send_stuff_to_client(client, stuff_to_send)
如果任何扭曲的api说“必须从反应堆螺纹中调用”,那么这总是意味着它将是非阻塞的。