Socket.IO向房间发送聊天消息

时间:2017-04-29 05:15:55

标签: node.js sockets socket.io

我目前在socketio中有一个系统,可以为个人消息创建空间:

null:java.lang.UnsupportedOperationException: requires a TFIDFSimilarity (such as ClassicSimilarity)

if / else语句基本上按字母顺序创建房间名(person1-person2),以防止双方加入房间时出现混淆。如果插座尚未插入,则插座将加入此房间。当服务器收到"聊天消息"时,全部触发。我已经确认插座房加入部分有效。但是,我似乎没有在客户端收到消息:

4.406719 = idf, computed as log(1 + (docCount - docFreq + 0.5) / (docFreq + 0.5))

我没有收到警报"已收到消息"当我发送消息时为什么是这样?为什么我没有收到服务器的消息?谢谢!

编辑: 这是我的客户端#loading { position: relative; } #loading img { position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; }

  socket.on("chat message", function(msg) {
    var roomname;
    if (msg.recipient > msg.sender) {
        roomname = msg.sender + "-" + msg.recipient;
    }
    else {
        roomname = msg.recipient + "-" + msg.sender;
    }
    if(!io.sockets.adapter.sids[users[msg.sender]][roomname]) {
        socket.join(roomname);
    }
    var clients = io.sockets.adapter.rooms[roomname].sockets;
    console.log(clients);
    io.in(roomname).emit("chat message", msg);
});

1 个答案:

答案 0 :(得分:1)

分析代码后(OP通过聊天提供完整代码)我发现了问题。

您在客户端有多个socket.io连接,每个var socket = io();创建一个新连接和一个新的套接字ID。

您使用以下代码加入了会议室:

var socket = io();
$("#form-send-message").submit(function () {
     var messageDetails = {
        sender: "<%=currentUser.username%>",
        recipient: $(this).find("textarea").val(),
        message: $(this).find(".chat-message-input").val()
    }
    socket.emit("chat message", messageDetails);
    $(".chat-message-input").val("");
    return false;
});

然后你希望服务器的io.in(room).emit进入"chat message"监听器,当你覆盖套接字并创建一个新连接时,新的套接字永远不会进入房间。

var socket = io(); //A new connection, a complete different socket

//This socket never joined the room

socket.on("chat message", function(msg) {
    alert("received message");
    console.log(msg.message);
    if (msg[message] != "") {
        $(".chat-history-div").append($("<li>").text(msg.message));
    }
});

您应该只有1个单一连接。

所以要解决你的问题:

var socket = io();
$("#form-send-message").submit(function () {
     var messageDetails = {
        sender: "<%=currentUser.username%>",
        recipient: $(this).find("textarea").val(),
        message: $(this).find(".chat-message-input").val()
    }
    socket.emit("chat message", messageDetails);
    $(".chat-message-input").val("");
    return false;
});

socket.on("chat message", function(msg) {
    alert("received message");
    console.log(msg[message]);
    if (msg[message] != "") {
        $(".chat-history-div").append($("<li>").text(msg.message));
    }
});