[英]Is Flask-SocketIO's emit function thread safe?
我有一個Flask-SocketIO應用程序。 我可以安全地從不同的線程調用socketio.emit()
嗎? socketio.emit()
是否像普通的socket.send()
一樣原子?
socketio.emit()
函數是線程安全的,或者我應該說它是線程安全的,因為目前有一個與此相關的開放問題。 請注意,此上下文中的“thread”表示支持的線程模型。 大多數人在生產中將Flask-SocketIO與eventlet或gevent結合使用,因此在這些上下文中,線程意味着“綠色”線程。
打開問題與使用消息隊列有關,當您有多個服務器時,這是必需的。 在該設置中,此時對隊列的訪問不是線程安全的。 這是一個需要修復的錯誤,但作為一種解決方法,您可以為每個線程創建不同的socketio
對象。
關於socketio.emit()
是否是原子的第二個問題,答案是否定的。 這不是簡單的套接字寫操作。 有效負載需要以某種方式格式化以符合Socket.IO協議,然后根據所選的傳輸(長輪詢或websocket),寫入以完全不同的方式發生。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.