2017-05-25 5 views
0

私のコード(下記)が動作しない理由を理解できません。 console.logは、ソケットに送信する前に、サーバー側の正しいsocket.idを表示します。では、なぜメッセージが届かないのですか?プライベートメッセージがsocket.ioで機能しない

サーバー側:

socket.on("connectToUser", function(userName, currentUserName, userID){ 
     console.log("user wants to connect to: ",userID); 
     socket.to(userID).emit("connectNotification", currentUserName); 
    }); 

クライアント・サイド:

socket.on("connectNotification", function(currentUserName){ 
     console.log("correct user notified"); 
     $("#connectToBox").append("Hallo"); 
    }); 

はsocket.idはオリジナルのものでなければなりませんか?その時点で、socket.ioはすでに基づいていくつかの内部のハウスキーピングを行っているので、connectionイベントが発生した後にsocket.idを変更

socket.on('connection', function(socket){ 
 
    console.log('a user connected', socket.id); 
 
    var id = uuid.v4(); 
 
    socket.id = id; 
 
    console.log(socket.id);

+1

私はそう思う、それは元のものでなければならない、 'uuid.v4()'を使ってそれを操作せず、あなたのソケットから返されているものを使って、それが動作しているかどうかを確認する。 –

+0

ソケットvar!私はあなたのコードについてもっと詳しく説明するべきだと思います。なぜなら、これが何が間違っているかを理解するには十分ではないからです。 – Luillyfe

+0

まずクライアントがサーバーに正しく接続されていることを確認する必要があります クライアント側:新しいio.connect( "http:// localhost:3000 your app url"); –

答えて

1

が、遅すぎるおそらくです:私はこのように、接続上でそれを変更しています元のID。

独自のIDを使用したい場合は、あなたがmiddleware function代わりに(免責事項:私はsocket.ioの内部で過度に慣れていないんだけど、私は一緒に入れて、いくつかのサンプルコードが動作しているようです):使用する必要があります

let server = require('socket.io')(...); 

server.use(function(socket, next) { 
    socket.id = uuid.v4(); 
    next(); 
}).on('connection', function(socket) { 

    socket.on("connectToUser", function(userName, currentUserName, userID){ 
    console.log("user wants to connect to: ",userID); 
    socket.to(userID).emit("connectNotification", currentUserName); 
    }); 

}); 
+0

実際に接続時にクライアントに渡される元のIDを使用して終了しました。完璧に動作します! – JonasSH

関連する問題