2015-10-01 14 views
10

私はウェブソケットについて多くのことを読んだことがあります。この質問は、それらを適切に使用する方法に関するものです。私は正しい方法で通知とチャットシステムを実装したいと思います。Websockets通知/チャットシステム

通知には、通知とチャンネルのチャットがあり、チャットにはチャット/チャンネルがあります。

これらの2つのチャネルも「グローバル」ではありませんか?サイトに1.000.000人のユーザーがいる場合、これらのユーザーはすべてこの2つのチャンネルに属しているとします。 1つの通知が別の特定のユーザーに送信されると、これは、1.000.000ユーザーが加入しているチャネルを介してメッセージが送信されることを意味します。

チャットメッセージと同じです。ユーザーが別のユーザーとチャットをしたいとします。各メッセージは、すべてのユーザが購読しているチャネルを通過し、最終的には、渡されたreceiver_idのためにターゲットユーザだけがメッセージを受信します。

通知チャネルと「プライベート」チャットチャネルを正しく処理するにはどうすればよいですか?

各ユーザーのために、「サブチャンネル」(グループチャットや通知、例えば「通知/チャンネル/ USER1」)を作成するために、よりパフォーマンスと安全であるか、単に一つの大きなチャンネル内のすべてのユーザーを聞かせしませんか?個人的に

+0

アイデアはありませんか?私はこれがWebSocketに関して誰もが考えていたはずのものだと思うので、それを行うための推奨される方法が必要です。 – user3746259

+0

1mのすべてのユーザーが同じグループにチャットしてもらいたいですか?それ以外の場合は、明らかに物事をサブグループに分割する必要があります。通知と同じです。パフォーマンスの影響に加えて、プライバシーの理由からすべてのユーザーがすべての通知を受け取るわけではありません。 – gzost

+0

私は1つの大きなグループでチャットや通知を送信することを意味しませんでした。 – user3746259

答えて

1

次のように、私はこれに対処しまう方法がある:

各ユーザは、1つのWebSocketコネクションを持っています。この接続は、すべてのデータを渡すために使用されます。私は、データを前後に渡すためにjson形式を使用します。私はjson構造体のフィールドを使って、メッセージの種類やチャットルームIDなどの情報を示します。

{ 
    "type":"chat", 
    "chatID":4756, 
    "message":"Hello, world!" 
} 

クライアント側のJavaScriptのロジック:チャットメッセージがこのようなものになるだろう

{ 
    "type":"notification", 
    "message":"New Mail" 
} 

:私は通知を送信したいのであれば、それはこの(本当に単純な例)のようなものかもしれませんメッセージの種類とその処理方法を決定します。サーバ側のロジックは、ユーザが指定されたチャットルームに「加入している」かどうかを判断するので、どのユーザにどのチャットメッセージを送信するかを知ることができます。これによりセキュリティが確保されるため、ルームIDを購読していないユーザーにチャットメッセージを送信することはありません。

このメソッドの説明が必要な場合はお知らせください。

+0

素晴らしいアプローチですが、上記のように、特定のユーザーグループがチャットできる通知およびプライベートチャットチャネル用のユーザーごとのチャネルを作成するという結論に至りました。つまり、より良い分離モデルです。 – user3746259

+0

*これは1人のユーザーに1つのチャンネルしか持たず、別々のチャットチャンネルがないため、これはあなたとは異なります。ユーザーが1つのチャンネル – user3746259

+0

**を購読しようとすると、サーバー側でセキュリティチェックを行うことができます。また、jsを使用するだけで、クライアントからクライアントに直接メッセージを送信する方法を使用できませんでした。サーバー側のチェックは常にすべてのケースで行わなければならないので、悪いです – user3746259

関連する問題