Socket.io 不断向每个客户端发送请求的数据
Socket.io emit requested data to each client continuously
这是代码:
客户
var server = "localhost";
var socket = io('http://' + serve + ':4005');
socket.on('connect',function(){
socket.emit('send', {type:"<?php echo $datatype?>"}); //{type:"3,2"}
});
这是我的节点 js 服务器的代码:
服务器
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
console.log(data);
});
client.on('send',function(data){
var datafinal = [];
setInterval(function () {
var usertype = data.type;
var types = usertype.split(',');
for (var i = 0; i < types.length; i++){
datafinal.push(apifinaldata.filter((inbound) => inbound.usertype == types[i] && inbound.active == 1 ));
}
var final = datafinal.reduce(function(a, b) {
return a.concat(b);
}, []);
datafinal = [];
io.emit('finaldata', final); io.emit('callwaiting', callsdatafinal);
}, 1000);
})
});
server.listen(4005);
当我启动服务器时,它收到来自客户端 A 的请求以及它想要的数据类型(例如 {type : "3,2" }
。因此服务器只向客户端发送特定数据。但是当另一个客户端说B 要求服务器发送 {type : "1"}
的数据,在这种情况下,服务器将正确的数据分别发送给客户端 A 和 B,但客户端不会连续接收数据。服务器不断发送,但有时会发送发送到 A,有时发送到 B。我希望服务器不断向每个连接的客户端发送请求的数据。
另外如果我改变 io.emit('finaldata', final); io.emit('callwaiting', 调用数据最终);到 client.emit('finaldata', 最后); client.emit('callwaiting', 调用数据最终);它不会向任何客户端发送任何数据。
所以我想要一个解决方案,使服务器只向每个客户端持续发送每个客户端请求的特定数据
我该怎么做?
为此,您必须跟踪客户端 A 和 B,然后仅向特定客户端发送数据,下面是示例代码。
var clientA;
var clientB;
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
if (something){
clientA = client;
}
else {
clientB = client;
}
console.log(data);
});
client.on('send',function(data){
var datafinal = [];
setInterval(function () {
var usertype = data.type;
var types = usertype.split(',');
for (var i = 0; i < types.length; i++){
datafinal.push(apifinaldata.filter((inbound) => inbound.usertype == types[i] && inbound.active == 1 ));
}
var final = datafinal.reduce(function(a, b) {
return a.concat(b);
}, []);
datafinal = [];
if(someCondition){
clientA.emit('finaldata', final);
clientA.emit('callwaiting', callsdatafinal);
}
else {
clientB.emit('finaldata', final);
clientB.emit('callwaiting', callsdatafinal);
}
}, 1000);
})
});
这里clientA和clientB是连接的两个客户端,可以根据条件或者程序逻辑向任意客户端发送数据。
这是代码:
客户
var server = "localhost";
var socket = io('http://' + serve + ':4005');
socket.on('connect',function(){
socket.emit('send', {type:"<?php echo $datatype?>"}); //{type:"3,2"}
});
这是我的节点 js 服务器的代码:
服务器
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
console.log(data);
});
client.on('send',function(data){
var datafinal = [];
setInterval(function () {
var usertype = data.type;
var types = usertype.split(',');
for (var i = 0; i < types.length; i++){
datafinal.push(apifinaldata.filter((inbound) => inbound.usertype == types[i] && inbound.active == 1 ));
}
var final = datafinal.reduce(function(a, b) {
return a.concat(b);
}, []);
datafinal = [];
io.emit('finaldata', final); io.emit('callwaiting', callsdatafinal);
}, 1000);
})
});
server.listen(4005);
当我启动服务器时,它收到来自客户端 A 的请求以及它想要的数据类型(例如 {type : "3,2" }
。因此服务器只向客户端发送特定数据。但是当另一个客户端说B 要求服务器发送 {type : "1"}
的数据,在这种情况下,服务器将正确的数据分别发送给客户端 A 和 B,但客户端不会连续接收数据。服务器不断发送,但有时会发送发送到 A,有时发送到 B。我希望服务器不断向每个连接的客户端发送请求的数据。
另外如果我改变 io.emit('finaldata', final); io.emit('callwaiting', 调用数据最终);到 client.emit('finaldata', 最后); client.emit('callwaiting', 调用数据最终);它不会向任何客户端发送任何数据。
所以我想要一个解决方案,使服务器只向每个客户端持续发送每个客户端请求的特定数据
我该怎么做?
为此,您必须跟踪客户端 A 和 B,然后仅向特定客户端发送数据,下面是示例代码。
var clientA;
var clientB;
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
if (something){
clientA = client;
}
else {
clientB = client;
}
console.log(data);
});
client.on('send',function(data){
var datafinal = [];
setInterval(function () {
var usertype = data.type;
var types = usertype.split(',');
for (var i = 0; i < types.length; i++){
datafinal.push(apifinaldata.filter((inbound) => inbound.usertype == types[i] && inbound.active == 1 ));
}
var final = datafinal.reduce(function(a, b) {
return a.concat(b);
}, []);
datafinal = [];
if(someCondition){
clientA.emit('finaldata', final);
clientA.emit('callwaiting', callsdatafinal);
}
else {
clientB.emit('finaldata', final);
clientB.emit('callwaiting', callsdatafinal);
}
}, 1000);
})
});
这里clientA和clientB是连接的两个客户端,可以根据条件或者程序逻辑向任意客户端发送数据。