【发布时间】:2015-02-09 15:14:44
【问题描述】:
我在这里查看了几个答案,但我认为他们指的是旧版本的 socket.io,因为他们的解决方案对我不起作用。我正在使用
将数据返回到浏览器中io.emit('update', data)
但它会发送给所有客户端,因此当我转到相同的 URL 时,相同的数据会显示在多个窗口中。我是否必须在连接时将客户端 ID 存储在某处,还是可以在发出之前将其取回?请具体。我尝试了 SO 的其他一些解决方案,但我得到了很多 ReferenceError 'id' is not defined 或 sockets instead of socket。
服务器设置和连接:
var app = express();
var server = require('http').createServer(app)
var io = require('socket.io')(server)
app.get('/aPath', function (req, res, next) {
res.writeHead(200)
var data = {
"val1": req.query.val1,
"val2": req.query.val2,
"val3": req.query.val3,
"val4": req.query.val4,
"val5": req.query.val5,
"val6": req.query.val6,
}
/*console.log(io.sockets.id)*/
//io.to(io.sockets.id).emit('update', data)
//io.sockets.socket(id).emit('update', data)
io.emit('update', data)
res.end("OK")
})
io.on('connection', function (socket) {
console.log('websocket user connected')
});
【问题讨论】:
-
您必须以某种方式将 restful 客户端与套接字客户端关联起来。一旦你这样做了,你就可以发出你的数据了。
-
我不确定我是否理解您的意思“将 RESTful 客户端与套接字客户端相关联”您能进一步解释一下吗?
-
阅读我的回答。基本上确保您知道第三方客户端发送的信息是谁。如果您有 1000 个活跃用户,您希望将其发送给正确的用户,因此您必须将正确的套接字用户与第三方客户端的响应相关联。