我用SailsJs完成了我的第一个应用程序。目前我正在使用ajax来检索页面数据,但我想将其更改为使用套接字。我在服务器上运行了一个cron作业,我的目的是在完成每个cron作业后向所有连接的客户端发送消息。我可以从github看到echo示例:https://github.com/balderdashy/sails-docs/blob/0.9/sockets.md,但它不是我需要的。我宁愿看服务器发送消息,也不需要客户端发送任何东西,只能听。
服务器端CronController.js
// including my cron script
var cron = require('../../assets/js/cron');
module.exports = {
index: function (req, res) {
// including cron job module
var cronJob = require('cron').CronJob;
var job = new cronJob('0,10,20,30,40,50 * * * * *',
function() {
cron.run();
}, function () {
console.log('cron done');
},
true,
null
);
return res.json({
message: 'running cron...'
});
},
_config: {}
};
服务器端cron.js
var io = require('socket.io').listen(8887);
io.sockets.on("connection", function (s) {
s.emit('welcomemessage', { hello: "world" });
});
// Later on code
io.sockets.emit('Cron done', {msg:"msg"});
客户端script.js
socket.on('welcomemessage', function (json) {
console.log(json);
});
socket.on('Cron done', function (json) {
console.log(json);
});
我也更改了socket.io.js端口:8887
控制台说:info - socket.io已启动,网页localhost:8887指示套接字正在工作,但我没有得到欢迎消息或其他消息给客户端...
处理相同问题的其他主题:
node.js + socket.io broadcast from server, rather than from a specific client?
emit socket.io and sailsjs (Twitter API)
Node.js client for a socket.io server
解
我发现客户端的socket变量能够通过控制器操作获取消息:
socket.get("/mycontroller", function (response) { console.log(response); });
所以我必须做的是:
var s = io.connect("http://localhost:8887");
s.on('welcomemessage', function (json) {
console.log(json);
});