Javascript socket.io:发送给所有客户端的一次性命令/消息

Javascript socket.io:发送给所有客户端的一次性命令/消息,javascript,node.js,sockets,socket.io,socket.io-1.0,Javascript,Node.js,Sockets,Socket.io,Socket.io 1.0,我正在使用Node.js、Express和socket.io 我想向所有连接的socket.io客户端发送一次性命令/消息(例如,重新加载所有连接的客户端/web浏览器) 一些相关的、最少的示例代码: 客户端代码: <script type="text/javascript" src="/socket.io/socket.io.js"></script> <script> var socket = io(); socket.on('reload', func

我正在使用Node.js、Express和socket.io

我想向所有连接的socket.io客户端发送一次性命令/消息(例如,重新加载所有连接的客户端/web浏览器)

一些相关的、最少的示例代码:

客户端代码

<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script>
var socket = io();

socket.on('reload', function(msg){
  //location.reload();
  console.log("Reloading page!");
});
</script>
/**
 * app.js
 */

var express = require('express'),
    socket = require('./routes/socket');

var app = express();
var http = require('http').Server(app);

// Hook Socket.io into Express
var io = require('socket.io').listen(http);

// Setting up redis adapter
// See: http://socket.io/docs/rooms-and-namespaces/#sending-messages-from-the-outside-world
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

// ... snip ... 

// Nothing of relevance or substance in ./routes/socket.js
io.sockets.on('connection', socket);

// Start server
http.listen(3001, function(){
  console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env);
});
更多服务器端代码:

这是通过类似
$node reloadclients.js的方式运行的一次性命令:

/**
 * reloadclients.js
 */

var io = require('socket.io-emitter')({'host': 'localhost', 'port': 6379});
io.emit('reload', "now");

这似乎很有效。但是,当我运行
node reloadclients.js
时,我希望在emit成功运行后终止脚本(即使在脚本似乎工作之后,它仍继续运行)。你是怎么做的?调用
process.exit()在io.emit之后('reload','now')似乎会导致提前终止(客户端不会重新加载)。仅当
emit()
调用成功时,我才想终止
reloadclients.js
脚本


你对如何处理这个问题有什么想法吗?有更好的办法吗?我很乐意听取任何反馈:)

因为
io.emit
方法不支持回调函数(它抛出“广播时不支持回调”消息),所以无法检测到所有客户端都接收到消息。您可以在通过
setTimeout
发出后1秒内尝试退出脚本。谢谢@quiried。这就是我最后所做的(即等待几秒钟,期待最好的结果!呵呵)