node.js - 如何在 Node.js 中使用 Socket.io 从客户端发送到路由文件

标签 node.js sockets websocket socket.io routes

所以我使用单例模式来设置我的 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});
    });


  });

};

然后在我的 public/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');
});

我可以成功地从路由文件发送到公共(public)js文件(从后端到前端)。但是,我无法将信息从公共(public) js 文件发送到路由文件,它只发送到单例模式 js 文件。我怎样才能让它发送到路由文件?如果我以错误的方式处理这个问题,有人可以提供一个如何在路由和公共(public) js 文件之间进行通信的示例吗?

最佳答案

据我所知,您的单例设置没有任何问题。

但是,在您要监听事件的每个地方,您都必须将其包装在 io.on('connection', ...) 中。使其成为单例并不能阻止这是一个要求。

编辑:我在这里可能是错的,我刚刚注意到exports.initialize实际上并没有返回连接。尝试过吗?

关于node.js - 如何在 Node.js 中使用 Socket.io 从客户端发送到路由文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47773491/

相关文章:

c# - SocketAsyncEventArgs以及对Socket的混合Async和Sync调用

javascript - AngularJS websockets 太快了

node.js - 将前端 native websocket 客户端连接到 Node.js Socket.io 服务器

javascript - 什么是 NaCl 套接字 API?

node.js - 使用 npm 脚本作为 "bin"

javascript - 使用请求并让回调在函数内工作的异步调用

node.js - 在 Express.js 中将变量从中间件传递到 Passport

node.js - 使用sequelize 比较查询中日期的当前年份和月份

sockets - 如何路由QEMU内部的TCP端口/套接字?

c# - 如何调试消失的应用程序