回答編集履歴

1 訂正

AkitoshiManabe

AkitoshiManabe score 5355

2020/06/21 19:49  投稿

> 1. イベントがほぼ同時に2回以上起こった場合、処理が2度以上行われることがあるかどうか。
> 2. 上記のことが起こる場合、回避策があるかどうか
1. クライアント側のチャタリングや通信状況によるユーザ操作の繰り返しは**起こりうる**と考えた方が良いと思います。
2. サーバー側で **socket.id と ユーザ情報を対にしたキー**にして連想配列的なオブジェクトやMapを使いステート管理することで回避できそうに思います。
socket.io のリアルタイム通信は、@IT :[チャットアプリ開発に見る、Socket.IOの基本ライブラリの使い方](https://www.atmarkit.co.jp/ait/articles/1604/27/news026.html) が参考になります。
特に記事の3ページ目まで読み進めると、``io.on("connect", socket=>{ })`` のイベントリスナに渡される socket オブジェクトから ``socket.id`` を接続ごとのユニークな値として活用している事例を確認できたり、リアルタイム通信に存在する3つのステップの後処理まで説明されています。
1. 接続確立
2. 接続中の通信
3. 接続解除 (理) ... @IT記事3ページ目の「クライアント切断時の処理」セクションを参照
3. 接続解除 (後処理) ... @IT記事3ページ目の「クライアント切断時の処理」セクションを参照

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る