2017-02-02 6 views
2

私は現在、少しウェブサイトを開発しています。それは、サーバー側で何かを探してクライアントに返信するウェブサイトのようなものなので、誰もが別のチャンネルを聞きたいと思っています。Socket.io:誰もが違うチャンネルを作る方法を教えてください。

クライアント側:

var randomnum = Math.floor((Math.random() * 100) + 1); 
socket.emit('getnumber', randomnum); 
// Then listen to that channel for incoming stuff 
socket.on(randomnum, function(msg){ 
[...] 

サーバー側:私は考えている 唯一のアイデアは、このようなものである

socket.on('randomnum', function(randomnumget){ 
// Do things with it then 
[...] 
socket.emit('getnumber', 'stuff'); 
}); 

しかし、以上の4のためにこれを行うことは一種のは難しいだろう、私はそれを行う別の簡単な方法があると確信しています!ありがとうございます

答えて

0

ここに私の可能な実装のアイデア/フローです。現在、エンド・インプリメンテーションを改善する必要があるため、アプリケーションにどのような負荷をかける必要があるかは不明です。

あなたは何らかのIDでユーザーを識別し、それをcookieまたはlocalstorageに格納することを前提としています。

まず、ユーザーがサイトにアクセスすると、接続するソケットチャネル(例:GET /チャネル)が要求されます。サーバー側では、各ユーザーに一意のIDを与えるクエリを実装します.UUIDや他の時間ベースのIDである可能性があります。ユーザーがまったく同じIDを取得しないようにするために、Redisまたは他のDBにIDを格納することができます。

さらに、RedisキーEXPIREを使用して、10分後にDBからキーを削除することができます。

あなたの例のような乱数を使うのは、かなり早く衝突する傾向があるため、最良の選択肢ではありません。たとえば、よりユニークなチャンネル名を取得するには、sha256(Date.now() + Math.random())を使用します。

+0

私はこのアイデアは好きですが、現時点でどのように私のウェブサイトの仕事が「ユーザーから何かリクエストされていますか」 - サーバー:検索したときには - >ウェブサイトはおそらく知られていないので、ランダムな数字で十分でしょう – Trev

関連する問題