簡體   English   中英

Socket.io-向發件人和客戶端發送不同的數據?

[英]Socket.io - send different data to sender and clients?

我正在學習NodeJS和Socket.IO,並一直遵循着各式各樣的教程,主要側重於建立基本的聊天室。

我的應用程序到目前為止工作正常:能夠與客戶一起發送消息,並能夠移至其他“房間”。

現在,我試圖對其進行整理,使它看起來很重要。

我絆倒了以下想法:

當用戶A從房間A移到房間B時,將發送generate()方法來更新具有用戶計數的數組,然后將其發送回發送方。 然后更新側面板中的房間列表,例如,房間A(0),房間B(1)。

現在,向發送者發送新數據變得容易並且可行,房間列表得到更新,其他房間(發送者不在其中)具有超鏈接(這是用戶在房間之間移動的方式)

但是我想將數據發送給其他客戶端,因此他們的房間列表也會更新。 發送與以前相同的數據意味着其他客戶端的房間列表不正確,因為該數據引用了發送者加入的新房間名稱,而不是其他客戶端當前所在的房間。

一些代碼:

socket.on('switchRoom', function(data) {
    var newroom = sanitize(data).escape().trim();

    socket.leave(socket.room);

    socket.join(newroom);

    socket.room = newroom;

    socket.emit('updaterooms', rooms, newroom);

    // this is the problem area, socket.room should be the socket.room data for the non-sending client
    //socket.broadcast.emit('updaterooms', rooms, socket.room);
});

我如何將所有包含在它們自己的套接字“會話”(即socket.room)中的數據發送給所有其他客戶端(不是發送者)?

您將需要發出一個針對每個套接字的生成的消息。 您需要做的是遍歷每個套接字,根據每個套接字發出自定義消息,例如:

io.sockets.on('connect', function(socket) {
    socket.on('switchRoom', function(data) {
        var newroom = sanitize(data).escape().trim();

        socket.leave(socket.room);

        socket.join(newroom);

        socket.room = newroom;

        socket.emit('updaterooms', rooms, newroom);

        io.sockets.clients.forEach(function(client) {
            if (socket != client) {
                client.emit('updaterooms', rooms, client.room);
            }
        });
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM