【问题标题】:How do I seperate Socket.io route code into different files如何将 Socket.io 路由代码分离到不同的文件中
【发布时间】:2015-05-21 23:50:10
【问题描述】:

假设你有一个这样的server.js

io.on('connection', function (socket) {

    var userDetails = {};


    /*
    Connection (after login)
     */
    socket.on('userData', function (userDetails) {
        users[userDetails.id] = socket;
        userDetails = userDetails;
        require('user-online.js').register(socket, userDetails);
    });



    //Notification
    socket.on('sendNotification', function (users, notification) {
       users.forEach(function (y) {
            if(users[y] != null){
                users[y].emit(notification);
            }
       })

    });



    socket.emit('newNotification', 'hell');

    socket.emit('someEvent', 'hello world');

    socket.on('browserClose', function (msg) {
        console.log('this user has disconnect: ' + userDetails.username);
        users[userDetails.id] = null;
    });



    //check connection / status of other sockets:

    socket.on('isOnline', function(user_id){
        socket.emit('userStatus', users[user_id] != null);
    });

    socket.on('setMyLocation', function(location){
        users[userDetails.id].location = location;
    });
});

我不会费心把上面所有的东西放在它连接的地方,因为它与我的问题无关。

我的问题基本上是当添加更多代码时这个 server.js 文件会变得非常混乱。我想将我的套接字任务拆分为不同的 javascript 文件。但是我不确定它们是如何工作的,而且我似乎在任何地方都找不到任何这样的例子。

我的想法是为以下任务配备一个处理程序:

  • 通知
  • 聊天
  • 上传/下载文件

谁能把我推向正确的方向,或者有人有一些文档吗?

【问题讨论】:

标签: javascript node.js sockets socket.io


【解决方案1】:

您应该创建一个模块来管理来自我命名为“client-management”的客户端的连接:

var ClientManagement = function() {
    var self = this;
    this.messageListeners = [];
    /**
     * Add a messsage listener(require a onClientMessage(data,socket) function in the listener)
     * @param listener
     */
    this.addMessageListener = function(listener) {
        this.messageListeners.push(listener);
    };
    this.onMessage = function(data, socket) {
        for (var i = 0; i < this.messageListeners.length; i++) {
            try {
                this.messageListeners[i].onClientMessage(data, socket);
            } catch (exc) {

            }
        }
    };
   this.start=function(){
        var io = require('socket.io')(8080);
        io.sockets.on('connection', function(socket) {               
            /**
             * Receive message from client
             */
            socket.on('message', function(data) {
                self.onMessage(data, socket);
            });
        });
    });
  }
module.exports = new ClientManagement();

使用这个模块:

var clientManagementModule = require('./modules/client-management.js');
clientManagementModule.start();
var notificationModule = require('./modules/notification.js');
var chatModule = require('./modules/chat.js');
clientManagementModule.addMessageListener(notificationModule);
clientManagementModule.addMessageListener(chatModule);

【讨论】:

  • 您在客户端管理模块中有 io.on('connect') 您将如何路由到该位置以及如何创建多个此类模块?
猜你喜欢
  • 1970-01-01
  • 2016-08-03
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
相关资源
最近更新 更多