私はFlask-SocketIOアプリケーションを持っています。 socketio.emit()
を別のスレッドから安全に呼び出すことはできますか? socketio.emit()
は普通のようなものですsocket.send()
?Flask-SocketIOのemit関数はスレッドセーフですか?
3
A
答えて
2
socketio.emit()
関数はスレッドセーフであるか、スレッドセーフであると言わなければなりません。現在のところ、これに関連するオープンな問題が1つあります。この文脈における「スレッド」は、サポートされているスレッドモデルを意味することに留意されたい。ほとんどの人は、プロダクションでのeventletやgeventと一緒にFlask-SocketIOを使用しています。そのため、スレッドは「緑色」のスレッドを意味します。
open issueは、複数のサーバーがある場合に必要なメッセージキューの使用に関連しています。その設定では、この時点ではキューへのアクセスはスレッドセーフではありません。これは修正が必要なバグですが、回避策として、スレッドごとに異なるsocketio
オブジェクトを作成することができます。
socketio.emit()
がアトミックかどうかに関する2番目の質問では、答えはノーです。これは単純なソケット書き込み操作ではありません。ペイロードは、Socket.IOプロトコルに準拠するために特定の方法でフォーマットする必要があります。選択されたトランスポート(ロングポーリングまたはウェブソケット)に応じて、書き込みはまったく異なる方法で行われます。
関連する問題
- 1. この関数はスレッドセーフですか?
- 2. 関数ポインタはスレッドセーフですか?
- 3. 静的インライン関数はスレッドセーフですか?
- 4. node.jsでemit関数を使用する
- 5. シングルトンファクトリメンバ関数スレッドセーフ
- 6. サイモンモックでEmit関数を使用
- 7. スレッドセーフなコールバック関数
- 8. Vuejs $ emitがコールバックで親の関数をトリガーしなかった
- 9. C/C++のインライン関数はスレッドセーフな方法ですか?
- 10. LoadLibrary、FreeLibrary、およびGetModuleHandle Win32関数はスレッドセーフですか?
- 11. スレッドセーフと静的関数
- 12. 静的メンバー関数とスレッドセーフ
- 13. SIGNAL emitはある関数でのみ動作しますが、他の関数では動作しません。
- 14. ラムダ関数でemit()プロパティを定義する方法
- 15. socket.ioのemit関数で配列が許可されていますか?
- 16. javaスレッドセーフ:スレッドセーフですか?
- 17. 共有関数スレッドセーフでhttpcontextにアクセスしていますか?
- 18. UNITY:スレッドセーフなContainer.Resolve()関数をコンストラクタインジェクションで実装する方法は?
- 19. C標準のtime()関数はNULLパラメータを指定してもスレッドセーフですか?
- 20. $ emitを使ってangularJS内の子から親に関数を渡す
- 21. C:この関数をスレッドセーフにするには?
- 22. strcmpではスレッドセーフですか?
- 23. はPythonスレッドセーフで+ =ですか?
- 24. std :: queue :: empty()がスレッドセーフではないのはなぜですか?関数をスレッドセーフにするべきではありませんか?
- 25. DocumentBuilder.parse()はスレッドセーフですか?
- 26. ステートレスセッションはスレッドセーフですか?
- 27. ValueExpressionはスレッドセーフですか?
- 28. putStrLnはスレッドセーフですか?
- 29. SignalRはHub.Contextスレッドセーフですか?
- 30. boost :: threadはスレッドセーフですか?