我试图让一个聊天程序工作使用socket.io,但它似乎不能正常工作。
我使用的是Node.js服务器,它似乎运行正常。我认为这可能与发射到房间有关。
我在客户端浏览器上的代码是:
<script>
var socket = io("https://localhost:3000/userChat");
socket.on('connect', function(){
socket.emit('initialiseConnection', "user1");
});
socket.on('messageIn', function(msg){
console.log(msg);
$('#messages').append($('<li>').text(msg.message));
});
</script>因此,当页面加载时,socket.io连接到服务器,并在服务器上以"user1“发出"initialiseConnection”事件。这是一个专门为那个用户准备的新房间。
在服务器上,我处理的"initialiseConnection“代码是:
socket.on("initialiseConnection", function(username){
socket.join(username);
console.log(username + " has joined.");
Message.find({recipient:username}, function (err, message){
console.log("messages for "+username+": "+message.length);
for (var x = 0; x < message.length; x++){
console.log(username+"'s message "+x);
console.log(message[x]);
socket.to(username).emit("messageIn", {"message":message[x]});
}
});
});如您所见,这段代码创建并连接了一个与用户名相同的房间。在数据库中查找任何消息,并尝试将这些消息发送给用户。我把留言记录下来。确实有一条消息,"socket.to()“方法中的用户名也正确地显示在日志中。但是,客户端浏览器上的"socket.on('messageIn')“似乎没有捕捉到事件。
我也尝试过这样做:
setTimeout(function() {
socket.to(username).emit("messageIn", {"message":"test message"});
}, 5000);在socket.join()之后,如果这与一些需要完成的反向处理有关
有人能看出我在这件事上哪里出了问题吗?
谢谢。
编辑1
var https = require('https');
var express = require('express');
var app = express();
var server = https.createServer(https_options, app).listen(3000);
var io = require('socket.io')(server);
var userChat = io.of("/userChat");
userChat.on('connection', function(socket){
console.log('a user connected');
socket.on("initialiseConnection", function(username){
...
});
socket.on('disconnect', function(){
socket.leave(socket.room);
});
});发布于 2015-01-12 23:47:05
你需要改变这一点:
socket.to(username).emit("messageIn", {"message":message[x]});对此:
socket.emit("messageIn", {"message":message[x]});套接字是端点。发送时,您只需直接发送到套接字。你不给房间里的用户发邮件吗?你只需把它送到插座上。由于您的socket变量中已经有了套接字,所以这就是您发送的内容。
https://stackoverflow.com/questions/27911840
复制相似问题