我正在使用 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
,我想在发射成功运行后终止脚本(此时即使脚本看似工作,它也会继续运行)。你怎么做呢?调用process.exit();
afterio.emit('reload', "now");
似乎会导致提前终止(客户端不会重新加载)。我只想在调用成功时终止reloadclients.js
脚本。emit()
关于如何解决这个问题的任何想法?有没有更好的办法?我很乐意听取任何反馈:)