【发布时间】:2020-01-23 10:22:46
【问题描述】:
我目前正在为移动前端创建一个 websocket 服务器。在某些情况下,我只需要将 json 发送给特定用户,经过多次尝试后,我仍然无法让 Websocket 正常工作,因此我可以一次将我的 json 发送给一个客户端。
我正在使用这个库:github.com/websockets/ws
为了解释我的问题,我有几个产品包含几个需要实时刷新的变量。当用户连接到产品时,他只会收到该产品的 json,而其他用户将收到他们当前使用的其他产品的 json。这就是为什么我想向用户发送一个特定的 json 来启用它
我想知道你们中是否有人知道如何解决这个问题,因为我开始阻止它。
非常感谢。
const opp = new WebSocket.Server({port: 10001});
let user = 0;
let lookup = [];
opp.on('connection', function connection(op) {
lookup.push(op.id);
let id = "";
op.on('message', function incoming(message) {
console.log('received: %s', message);
id = message;
query = {
text: "SELECT id,state,users_list_name,user_win,timer_stamp FROM products WHERE id = " + parseInt(id) + " AND circle = 1 ORDER BY CASE WHEN state = \'available\' THEN \'1\' WHEN state = \'soon\' THEN \'2\' WHEN state = \'expired\' THEN \'3\' END",
};
});
client.connect();
const interval = setInterval(function ping() {
client.query(query, (err, res) => {
if (err) {
console.log(err.toString());
console.log(query);
} else {
console.log(lookup);
for (let i = 0; i < lookup.length; i++){
console.log("########################");
lookup[i].send(JSON.stringify(res.rows));
}
}
});
}, 300);
});```
【问题讨论】:
-
为什么你的标题说的是socket.io,但你的代码使用的是普通的webSocket?是哪个?
-
这是一个错误,感谢您指出这一点。
-
所以,
lookup[i]将成为来自op.id的id。这真的是你可以发送的吗?您正在使用哪个 websocket 服务器模块,以便我可以查看它的 API?另外,您问题的第一句话仍然提到socket.io。我看到你已经更正了标题。 -
如果您只想将数据发送到开始此时间间隔的客户端,那么不要循环遍历所有
lookup数组,只需执行op.send()。这将代表向您发送消息的客户端,该消息设置了与此间隔对应的查询。 -
仅供参考,以 300 毫秒的频率为每个连接的 webSocket 运行单独的
setInterval()根本不会扩展。您的数据库将很快成为瓶颈。我不知道您要在这里解决什么问题,但是您将需要一个不同/更好的架构,它不会让每个客户端每 300 毫秒单独访问您的数据库。