Socket.io 向套接字发送消息时出错

Posted

技术标签:

【中文标题】Socket.io 向套接字发送消息时出错【英文标题】:Socket.io error sending message to socket 【发布时间】:2014-12-24 10:11:01 【问题描述】:

有一行代码:

io.sockets.socket(socketid).emit('counter',  all : data.all, dialog : data.dialog );

它给了我例外:

TypeError: Object #<Namespace> has no method 'socket'

我的连接事件:

io.sockets.on('connection', function(socket) );

为什么对象socket不存在?

完整代码:

var socketio = require('socket.io');
var server = http.createServer(app).listen(8181, function()
    console.log("Express server listening on port "+ app.get('port') +" in "+ app.get('env') +" mode.");
);

var io = socketio.listen(server);
io.on('connection', function(socket) );

【问题讨论】:

【参考方案1】:

创建用于 express 的套接字服务器。查看http://socket.io/docs/ 了解更多信息和帮助。

var app = require('express').createServer();
var io = require('socket.io')(app);

app.listen(8181);

io.on('connect', function(socket) 
    socket.on('example', function(data) 
        //parse the data, do something, create response data object, etc.

    );
);

并且使用 HTTP + Express

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(8181);

io.on('connect', function(socket) 
        socket.on('example', function(data) 
            //parse the data, do something, create response data object, etc.

        );
    );

对于您尝试创建的发射(我下面的示例将通过提供 .to(socket.id) 仅向连接的套接字广播)

io.to(socket.id).emit('counter', all : data.all, dialog : data.dialog);

【讨论】:

我在没有io.sockets 的情况下尝试了你的示例 - 错误是一样的 你有 io 拉入你的服务器吗? var io = require('socket.io'); 这将在您的 server.js 文件中。 是的,在顶部脚本中有:socketio = require('socket.io');var io = socketio.listen(server); 好的,这可能看起来是一个微不足道的修复,但请幽默。查看我们编写的最新套接字服务器,我有以下设置代码:var io = require('socket.io');var server = require('https').createServer(options, app).listen(port); // remember thy port require('./config/sockets').start(io.listen(server)); 您可以只使用 io.listen(server) 和此代码(我们将套接字代码抽象到 config/sockets 中)。 我认为您在完整代码中遗漏了一些东西,例如明确的要求。看看我上面的完整代码示例,然后我强烈推荐我提供的 socket.io 文档链接。

以上是关于Socket.io 向套接字发送消息时出错的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io 不会在断开连接时向房间发送消息

使用 socket.io 向特定客户端发送消息,同时套接字 id 快速变化

向 Socket.IO 1.0 中的特定 ID 发送消息

套接字 io 不向房间发送消息

socket.io 如何跨多个服务器发送消息?

向特定的套接字 id 发送私人消息