私は過去数か月間 Socket.io を使用して、チャット ルーム、キック/禁止/モデレーター/フレンドなどを備えたかなり複雑なチャット アプリケーションを開発してきました。
開発の過程で、アプリを何度か書き直しましたが、まだコードと戦っています。
私は JavaScript がとても好きですが、アプリケーションが成長するにつれ、それを維持するのは本当に大変だと感じています。チャット アプリケーションの作成方法に関する膨大な量の「チュートリアル」を読みましたが、それらはすべて最も基本的な側面のみをカバーしています。GitHub のすべてのサンプル アプリ、および Web で見つけたほとんどのチャット アプリケーションでさえ同じことが言えます (それらのほとんどは、ユーザー管理のない単純な IM です)。
たとえば、ユーザーを部屋から追い出すなど、いくつかのユースケースは私にはあまりにもばかげているように思えます。
- モデレーターがキックボタンをクリック -> サーバーにイベントを送信
- サーバーはユーザー名をソケットとペアにします(または、すべてのユーザーにブロードキャストし、クライアント側でフィルターします)->キックイベントを彼に発行します
- ユーザーはサーバーにログアウト イベントを発行し、キックされたというメッセージも表示されます (ログアウトは罰の実装に過ぎません)。
- ユーザーはチャット ルームのユーザー リストから削除されます -> 現在のユーザー リストをルーム内のすべてのユーザーに送信します
これはそれほど複雑ではないように見えますが、UI を管理するためにクライアント側で発生するすべてのコールバックを追加すると (私は AngularJS を使用するため、イベントを使用してコントローラー間の通信を行います)、サーバー側の大量のコールバックも追加します。すべてがノンブロッキングであるため、これをテストするのは本当に難しいと思います。
クライアント側には別の問題があり、複数の場所でソケット イベントをリッスンする必要があるため、一種のシングルトン グローバル ソケット オブジェクトを用意し、複数の場所でイベント リスナーをフックする必要があります。
私は何か間違ったことをしていますか、それともこのコールバック地獄は、それを回避する方法がないWebソケットで作業した結果ですか?
このようなアプリケーションの開発を容易にする方法はありますか? たとえば、Socket.io の代替技術は? これまでのところ、最後のコミットが 5 か月前のNowJSと、本当にクールなmeteorしか見つかりませんでしたが、ウェブサイトを見ると、実際には安定していないようです。