簡體   English   中英

Flask-SocketIO的發射函數線程安全嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM