2016-02-17 28 views
0

A flask_socketio應用程序正在作爲服務器運行。在由應用管理的列表中,有幾個實例繼承threading.Threads,每個實例都運行一個主循環。偶爾,我想告訴flask-socketio服務器向某個房間發送廣播。我怎麼能這樣做?如何從Python中的其他線程廣播到socketio?

我無法弄清楚如何做到這一點,因爲flask_socketio正在主循環中運行,但我無法訪問此主循環。有沒有辦法讓燒瓶主循環從Queue讀取?

回答

0

您只需要爲此訪問SocketIO實例。某處在您的應用程序,你必須:

socketio = SocketIO(app) 

在從要發出線程,只需要導入該對象,並調用emit方法:

from app import socketio 
# ... 
def emit_to_room(event, data, room): 
    socketio.emit(event, data, room=room) 

希望這有助於!

+1

不幸的是,這是行不通的。消息沒有到達客戶端。 – mknaf

+0

我改變了方法,以便我將SocketIO實例傳遞給我的線程的構造函數,而不是導入它,工作。但是,現在我遇到了可能與線程和阻塞有關的其他問題,這使得完整的想法變得無用。 – mknaf

+0

如果您將eventlet或gevent與使用標準Python線程類的代碼結合使用,而這些類不是eventlet/gevent友好的,則可能會發生阻塞問題。如果你猴子補丁性病庫你應該沒問題。 – Miguel