所以我使用单例模式来设置我的websocket。
var sio = require('socket.io')
var io = null;
exports.io = function () {
var socket;
if(io === null){ // Initialise if not already made
io = initialize(server);
}
return io;
};
exports.initialize = function(server) {
io = sio.listen(server);
var connections = [];
console.log('IO Initialized!\n')
io.on('connection', function(socket){
connections.push(socket);
console.log('Connected: %s sockets connected', connections.length);
socket.on('disconnect', function(data){
connections.splice(connections.indexOf(socket), 1);
console.log('Disconnected: %s sockets connected', connections.length);
});
// Update function used to send messages to and from backend
socket.on('update', function(data){
io.sockets.emit('new message', {msg: data});
});
});
};
然后在我的公共/ javascript文件中我可以这样称呼
$(function(){
var socket = io.connect();
socket.emit('update', 'Test Update');
socket.on('update', function(data){
console.log('here: ' + data);
});
});
在我的路线文件中我有
router.use(function(req, res, next){
if(socket === undefined){
socket = io.io();
}
next();
});
router.get('/', function(req, res, next){
socket.on('update', function(data){
console.log('in routes');
});
socket.emit('update', 'leaving routes');
});
我可以从routes文件成功发送到公共js文件(从后端到前端)。但是,我无法将公共js文件中的信息发送到routes文件,它只发送到单例模式js文件。如何让它发送到路由文件呢?如果我以错误的方式解决这个问题,有人可以提供一个如何在路由和公共js文件之间进行通信的问题吗?
答案 0 :(得分:0)
据我所知,你的单身人士设置没有任何问题。
然而,在您要监听事件的每个地方,您都必须将其包裹在io.on('connection', ...)
中。使它成为一个单身并不妨碍这是一个要求。
编辑:我可能在这里错了,我刚注意到exports.initialize
实际上并没有返回connections
。试过吗?