回答編集履歴
4
typo修正 run_server -> run_forever
test
CHANGED
@@ -37,7 +37,7 @@
|
|
37
37
|
def main() -> None:
|
38
38
|
"""
|
39
39
|
この利用では変数 count は数値型なので問題ありませんが、
|
40
|
-
この利用例 (run_
|
40
|
+
この利用例 (run_forever(threaded=True)) では new_client 関数は別スレッドで呼ばれる為、
|
41
41
|
複数スレッドから参照されるオブジェクトを扱う際は、排他制御を独自に行う必要があります。
|
42
42
|
|
43
43
|
websocket サーバに対する複数スレッドからの同時メッセージ送信については
|
3
補足説明を追加
test
CHANGED
@@ -36,7 +36,12 @@
|
|
36
36
|
|
37
37
|
def main() -> None:
|
38
38
|
"""
|
39
|
+
この利用では変数 count は数値型なので問題ありませんが、
|
40
|
+
この利用例 (run_server(threaded=True)) では new_client 関数は別スレッドで呼ばれる為、
|
41
|
+
複数スレッドから参照されるオブジェクトを扱う際は、排他制御を独自に行う必要があります。
|
39
42
|
|
43
|
+
websocket サーバに対する複数スレッドからの同時メッセージ送信については
|
44
|
+
websocket_server ライブラリが最新であれば問題ありません。過去バージョンではマルチスレッドに未対応。
|
40
45
|
"""
|
41
46
|
count = 0
|
42
47
|
|
2
サンプルコードを追加
test
CHANGED
@@ -26,3 +26,35 @@
|
|
26
26
|
asyncio を用いた他の websocket ライブラリでは
|
27
27
|
接続時に呼び出されるハンドラ内に、ループ処理で非同期に実行されるコードを書けます。
|
28
28
|
|
29
|
+
|
30
|
+
----
|
31
|
+
サーバーを別スレッドで実行するコードのサンプルを追記
|
32
|
+
```python
|
33
|
+
|
34
|
+
import time
|
35
|
+
from websocket_server import WebsocketServer
|
36
|
+
|
37
|
+
def main() -> None:
|
38
|
+
"""
|
39
|
+
|
40
|
+
"""
|
41
|
+
count = 0
|
42
|
+
|
43
|
+
def new_client(client, server):
|
44
|
+
# 新規接続時にリセット
|
45
|
+
nonlocal count
|
46
|
+
count = 0
|
47
|
+
|
48
|
+
server = WebsocketServer(port=9999)
|
49
|
+
server.set_fn_new_client(new_client)
|
50
|
+
server.run_forever(threaded=True)
|
51
|
+
|
52
|
+
while True:
|
53
|
+
count += 1
|
54
|
+
server.send_message_to_all(f"{count}")
|
55
|
+
time.sleep(1)
|
56
|
+
|
57
|
+
if __name__ == '__main__':
|
58
|
+
main()
|
59
|
+
```
|
60
|
+
|
1
他のライブラリについて補足
test
CHANGED
@@ -22,3 +22,7 @@
|
|
22
22
|
JavaScript 側の setInterval で、毎秒 websocker server へ何かのメッセージを投げかけて
|
23
23
|
そのメッセージに対する返信 message_recieved ハンドラ内でカウント数を送出するようにする、等。
|
24
24
|
|
25
|
+
他の実装案2:
|
26
|
+
asyncio を用いた他の websocket ライブラリでは
|
27
|
+
接続時に呼び出されるハンドラ内に、ループ処理で非同期に実行されるコードを書けます。
|
28
|
+
|