【发布时间】:2017-09-27 06:30:27
【问题描述】:
我目前在 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 语句基本上按字母顺序创建房间名称(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;
});
【问题讨论】:
-
你能告诉我们你的客户端
emit("chat message")吗?如果这是真的,我没有看到提供的代码有任何问题:我已确认套接字室连接部分有效 -
浏览器的开发者控制台是否显示错误?
-
你得到console.log(clients)的输出了吗?我认为当您尝试在房间中查找客户端数量并且代码未执行时会出现错误尝试在该行之后放置另一个 console.log() 并检查输出
-
@MarcosCasagrande 我添加了客户端聊天消息发出
-
@MehulPrajapati 我将
console.log(clients)移到io.in(roomname).emit之后,我仍然将相同的内容记录到控制台,消息仍然没有发送/工作