2
socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room');

クライアント側にヒットしていません。私はからのメッセージしか見ることができません:

socket.emit('updateActivity', 'SERVER', 'you have CONNECTED to '+ socketEntity.roomName);

私は何か間違ったことをしましたsocket.join()か?

また、ブロードキャストイベントにの代わりに別の名前を付けようとしましたがupdateActivity、どちらも機能しません。

ログ出力には、ブロードキャストの放出についてはまったく言及されていません。

質問の更新:

broadcast.to()を次のスニペットに置き換えると機能するという解決策を見つけました。

socket.get(socketEntity.roomId, function (error, room) {
   io.sockets.in(room).emit('updateActivity', 'SERVER', 'you -joined- this group '+ socketEntity.roomName);
});

しかし、現時点でそれが当てはまる理由はわかりません...それで、どういうわけか、文字列と同じroom上のio.sockets.in()のパラメーターですか?isn'tsocketEntity.roomId

元のコード:

サーバ:

io.sockets.on ('connection', function (socket){
    socket.on('joinRoom', function(socketEntity){
        socket.join(socketEntity.roomId);
        socket.emit('updateActivity', 'SERVER', 'you have CONNECTED to '+ socketEntity.roomName);
        socket.broadcast.to(socketEntity.roomId).emit('updateActivity', 'SERVER', 'you -joined- this room'+ socketEntity.roomName);
    });
});

クライアント:

HTML:
<ul id="activityList" class="dropdown-menu"></ul>
JavaScript:
$(document).ready(function(){
    var socketEntity = {roomId:sampleRmId, roomName: "sample room"}
    socket.emit('joinRoom', socketEntity);


    socket.on('updateActivity', function (username, data){
        $('#activityList').prepend('<li><a href="#"><div>'+ data +'</div></a></li>');
    });
})
4

1 に答える 1

7

socket.broadcast呼び出されているクライアントを除く他のすべてのクライアントにメッセージを送信します。

socket.emitその特定のクライアントにのみ送信します

io.sockets.emitすべてのクライアントに送信します

于 2013-03-26T17:12:14.793 に答える