我当前在socketio中有一个系统,该系统为单个消息创建空间:
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);
});
if/else语句基本上会以字母顺序创建RoomName(Person1-Person2(,以防止双方加入房间时混淆。如果插座尚未加入该房间,则可以加入该房间。当服务器收到"聊天消息"时,这一切都是触发的。我已经确认插座室连接了零件。但是,我似乎没有在客户端的终点上收到消息:
var socket = io();
socket.on("chat message", function(msg) {
alert("received message");
console.log(msg[message]);
if (msg[message] != "") {
$(".chat-history-div").append($("<li>").text(msg.message));
}
});
发送消息时,我不会收到"收到消息"的警报。为什么是这样?为什么我不收到服务器消息?谢谢!
编辑:这是我的客户端emit("chat message)
:
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;
});
分析您的代码后(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));
}
});