首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将事件发送到无法从服务器工作的Socket.IO

问将事件发送到无法从服务器工作的Socket.IO
EN

Stack Overflow用户
提问于 2015-01-12 22:30:06
回答 1查看 3.1K关注 0票数 3

我试图让一个聊天程序工作使用socket.io,但它似乎不能正常工作。

我使用的是Node.js服务器,它似乎运行正常。我认为这可能与发射到房间有关。

我在客户端浏览器上的代码是:

代码语言:javascript
复制
<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“代码是:

代码语言:javascript
复制
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')“似乎没有捕捉到事件。

我也尝试过这样做:

代码语言:javascript
复制
setTimeout(function() {
  socket.to(username).emit("messageIn", {"message":"test message"});
}, 5000);

在socket.join()之后,如果这与一些需要完成的反向处理有关

有人能看出我在这件事上哪里出了问题吗?

谢谢。

编辑1

代码语言:javascript
复制
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);
  });
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-12 23:47:05

你需要改变这一点:

代码语言:javascript
复制
socket.to(username).emit("messageIn", {"message":message[x]});

对此:

代码语言:javascript
复制
socket.emit("messageIn", {"message":message[x]});

套接字是端点。发送时,您只需直接发送到套接字。你不给房间里的用户发邮件吗?你只需把它送到插座上。由于您的socket变量中已经有了套接字,所以这就是您发送的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27911840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档