是否可以强制所有客户端使用socket.io进行更新?我尝试了以下方法,但似乎在新客户端连接时不会更新其他客户端:
服务器端JavaScript:
我正在尝试向所有客户端发送一条消息,其中包含当前连接的用户数,它会正确地发送用户数...但是,在刷新页面之前,客户端本身似乎不会更新。我希望这是实时发生的。
var clients = 0;
io.sockets.on('connection', function (socket) {
++clients;
socket.emit('users_count', clients);
socket.on('disconnect', function () {
--clients;
});
});
客户端JavaScript:
var socket = io.connect('http://localhost');
socket.on('connect', function(){
socket.on('users_count', function(data){
$('#client_count').text(data);
console.log("Connection");
});
});
发布于 2018-10-12 18:39:41
您可以按照此示例来实现您的场景。
你可以让所有的客户端加入一个公共房间来发送一些更新。每个插座都可以像这样加入房间:
currentSocket.join("client-presence") //can be any name for room
然后,您可以让客户端键入您的套接字,其中包含多个客户端的数据(id和状态),如果一个客户端的状态发生更改,您可以在套接字上接收到如下所示的更改事件:
socket.on('STATUS_CHANGE',emitClientsPresence(io,namespace,currentSocket); //event name should be same on client & server side for catching and emiting
现在,您希望所有其他客户端都得到更新,因此您可以执行以下操作:
emitClientsPresence => (io,namespace,currentSocket) {
io.of(namespace)
.to(client-presence)
.emit('STATUS_CHANGE', { id: "client 1", status: "changed status" });
}
这将向所有加入“客户端存在”房间的套接字发出STATUS_CHANGE事件,然后您可以在客户端捕获相同的事件并更新其他客户端的状态。
发布于 2020-12-29 18:48:23
根据这个Broadcasting。对于nodejs服务器,您可以使用以下内容:
io.emit('event_id', {your_property: 'your_property_field'});
请务必初始化websocket,例如:
var express = require('express');
var http = require('http');
var app = express();
var server = http.Server(app);
var io = require('socket.io')(server);
app.get('/', function (req, res) {
res.send('Hello World!');
io.emit('event_hello', {message: 'Hello Socket'});
});
server.listen(3000, function () {
console.log('Example app listening on port 3000!');
});
在这种情况下,当用户到达您服务器时,将使用json对象{event_hello:'Hello Socket'}向所有web套接字客户端广播“message”。
https://stackoverflow.com/questions/7352164
复制相似问题