簡體   English   中英

如何在Node.js中使用Socket.io從客戶端發出到路由文件

[英]How to emit from Client Side to a routes file with Socket.io in Node.js

因此,我使用單例模式來設置我的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');
});

我可以成功地將路由文件發送到公共js文件(從后端到前端)。 但是,我無法將信息從公共js文件發送到路由文件,而只能發送到單例模式js文件。 我如何才能將其發送到路由文件? 如果我使用的是錯誤的方式,請問有人可以提供路線與公共js文件之間如何通信的示例嗎?

據我所知,您的單例設置沒有任何問題。

但是 ,在要監聽事件的每個地方,都必須將其包裝在io.on('connection', ...) 將其設置為單例並不能阻止此要求。

編輯:我可能在這里錯了,我剛剛注意到exports.initialize實際上並沒有返回connections 試過了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM