2014-02-21 123 views
0

我有一個扭曲的TCPServer,它有大量的客戶端連接。我需要能夠讓一個主客戶端向該服務器發出命令,以非阻塞的方式將消息發送到所有其他客戶端連接。換句話說,服務器應該有一個命令處理程序(建立在lineReceived之上),它接受來自主客戶機的特殊命令,然後啓動線程或進程來遍歷所有其他客戶機,並向每個客戶機發送命令(sendLine)的這些客戶。主客戶端的命令處理程序應該在啓動線程後立即返回。問題是,任何對twistedLine中的sendLine調用都必須從主反應器線程調用,因此必須使用callFromThread完成。因此,我的主命令處理程序可能會這樣做:用python扭曲發送大量消息

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) 

顯然這只是僞代碼,但會是這樣的工作?

回答

1

er,LineReceiver.sendLine()已經是非阻塞;如果有任何扭曲API稱,它總是意味着它的將是非阻塞「必須從反應器線程被稱爲」

def handle_master_command(self, command): 
    for client in other_clients: 
     send_stuff_to_client(client, stuff_to_send) 

:你不需要這方面的任何線程,只是做。