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 向套接字发送消息时出错的主要内容,如果未能解决你的问题,请参考以下文章