Val*_*i K 36 node.js express socket.io
我对socket.io感到很疯狂!文档很糟糕,根本不是真的.
我想通过socket.io向特定客户端发送反馈
我的服务器端看起来像这样:
app.get('/upload', requiresLogin, function(request, response) {
response.render('upload/index.jade');
io.sockets.on('connection', function (socket) {
console.log('SOCKET ID ' + socket.id);
io.sockets.socket(socket.id).emit('new', 'hello');
});
});
Run Code Online (Sandbox Code Playgroud)
而客户端看起来像这样:
$(document).ready(function() {
var socket = io.connect('http://localhost:80/socket.io/socket.io.js');
socket.on('new', function (data) {
console.log(socket.id);
console.log(data);
//$('#state').html(data.status);
});
});
Run Code Online (Sandbox Code Playgroud)
但客户端什么都不做.我几乎尝试了一切.请有人告诉我我做错了什么!:(
pky*_*eck 52
向特定客户端发送消息,保存连接到对象中服务器的每个客户端.
var socketio = require('socket.io');
var clients = {};
var io = socketio.listen(app);
io.sockets.on('connection', function (socket) {
clients[socket.id] = socket;
});
Run Code Online (Sandbox Code Playgroud)
然后你可以稍后做这样的事情:
var socket = clients[sId];
socket.emit('show', {});
Run Code Online (Sandbox Code Playgroud)
Tom*_*ers 18
通过socket.io向特定客户端发送反馈的几种方法包括:
如pkyeck所述,将所有客户端保存到Object,以便稍后可以在路由处理程序中发送给这些特定客户端,例如:
var sessionsConnections = {};
sio.on('connection', function (socket) {
// do all the session stuff
sessionsConnections[socket.handshake.sessionID] = socket;
});
Run Code Online (Sandbox Code Playgroud)或者,使用socket.io内置的房间支持 - 在连接时订阅每个客户端到一个房间,并通过这个房间在路由处理程序中发送,例如:
sio.on('connection', function (socket) {
// do all the session stuff
socket.join(socket.handshake.sessionID);
// socket.io will leave the room upon disconnect
});
app.get('/', function (req, res) {
sio.sockets.in(req.sessionID).send('Man, good to see you back!');
});
Run Code Online (Sandbox Code Playgroud)鸣谢:
http://www.danielbaulig.de/socket-ioexpress/#comment-1158
请注意,这两个示例解决方案都假定socket.io和express已配置为使用相同的会话存储,因此引用相同的会话对象.有关实现此目的的更多详细信息,请参阅上面和下面的链接
https://github.com/LearnBoost/socket.io/wiki/Authorizing
2件事
1)你应该把你io.sockets.on(..)的app/update路线放在你的路线之外,以防止为客户增加多个听众.
2)io.sockets.socket(id); 不应该使用,应该是socket.emit('new', 'hello')
在socket.io 1.0中,这是它的工作方式.它可能适用于较低版本,但我无法保证.
socket.to(socket_id_here).emit('new', 'hello');
Run Code Online (Sandbox Code Playgroud)
这是因为socket.io会自动将套接字添加到连接时套接字ID的房间.
此外,如果您计划升级到1.0版,那么api会有很多更改,因此您有时需要更改一些代码才能使其在1.0中运行.
| 归档时间: |
|
| 查看次数: |
50137 次 |
| 最近记录: |