2016-03-25 20 views
1

これは、.once呼び出しなしで機能します。socket.io .onceメッセージを送信する

私は

io.on('connect', function (socket) { socket.once('connect', function() { socket.emit('mydata', { feed: result});

とサーバー側のコードから単一のメッセージを送信しようとしていますが、私は二行目を削除しない限り、私はクライアント側で何も得ます。 は私もsocket.once(「マイデータ」、{フィード:結果を})試みたが、新しい「MYDATA」が存在する場合にのみ、すなわち

throw new TypeError('listener must be a function'); 

どのようにしてクライアント側にメッセージを送信することができますか?

おかげ

答えて

2

まず第一に、.once()はイベントリスナーのためです - あなたはそれが発生し、その後の時間は、イベントが発生し、次の時間が通知されないようにしたいとき。それはメッセージを送ることとは関係ありません。

特定のコードが実行しようとしていることは、実際には意味がありません。あなたはconnectイベントに参加しており、別のconnectイベントを待ち受けようとしていますか?あなたが達成しようとしていることをより完全に記述すれば、それは役に立ちますか? 「新しいmydataの平均があるときだけ」は何ですか?新しいmydataがあるかどうかをどのように伝えますか?あなただけのクライアントが最初に接続mydataメッセージを送信しようとしている場合

、あなただけのこの操作を行うことができます。

io.on('connect', function (socket) { 
    socket.emit('mydata', { feed: result}); 
} 

をあなたはあなただけにこのメッセージを一度に送信してくださいしようとしている場合あなたはページがリロードされた場合でも、このクライアントは、今までに一度だけ、このメッセージを送っていることを確認する場合、またはクライアント場合

io.on('connect', function (socket) { 
    if (!socket.sentMydata) } 
     socket.emit('mydata', { feed: result}); 
     socket.sentMydata = true; 
    } 
} 

:でも同じソケットに再接続した場合に、あなたはこれを、接続を行うことができます離れてナビゲートした後、永続性を使用する必要がありますクッキーやセッションIDなどのようなntマーカー。

+0

根本的な問題はhttps://stackoverflow.com/a/16796375/3276634で、私にも影響します。しかし、これをTypeScriptでどのように処理できますか? idは、接続ごとに変わるのでスイート可能ではありません。 – Lion

+0

@Lion - あなた自身の質問をしたり、自分のコードを表示したり、自分自身の具体的な問題を説明したりする必要があるようです。 – jfriend00

0

あなたの質問を正確に理解できたかどうかはわかりませんが、マッピングを使用することはできます。

var sentHolder = {} 

socket.on("mydata", function(mydata){ 

    if(sentHolder[socket.id] == false) { 
     //sent data to client with emit, this will run only once 
     sentHolder[socket.id] = true 
    }  

}) 
関連する問題