【问题标题】:Node.js - Socket.io - What's the best way to organize sockets?Node.js - Socket.io - 组织套接字的最佳方式是什么?
【发布时间】:2014-11-13 11:05:46
【问题描述】:

我从未使用过 socket.io,我想知道如何在我的模型中构建它,目前我计划有一个类 Socket 和另一个 Model 例如,将派生用于 UserModel

然后,在 UserModel.authenticate() 上,我会调用套接字将用户添加到我猜的某个房间。

我只是想知道这是否可行,或者我是否应该尊重某种设计模式,或者我的设计是否错误。 (没有落后的socket经验,所以最好问问有经验的人!)

如果您知道更好的方法或某种示例,请告诉我,我认为这很简单,但我可能错了。

【问题讨论】:

    标签: node.js sockets oop


    【解决方案1】:

    在尝试抽象套接字机制时,您尝试实现的内容听起来像 facade pattern

    在我看来,这种实现可能非常困难,因为您必须对套接字进行非常好的抽象,我有一个完全不同的方法,我的做法是通过@987654322 将分组的套接字分开@ 和责任,假设我有一个套接字文件,它只会进行用户交互,其他用于管理活动流(在社交网络的情况下)或管理产品等。在查看 MVC 模式中的控制器时查看它们.

    为了将套接字分成不同的物理文件,您可以通过如下文件管理事件处理程序:

    io.of('namespace').on('connection',function(socket){
        var eventHandlers = {
            'user': new userLib.UserSocket(socket, app),
            'document': new documentLib.documentSocket(socket,app)
        };
        for (var category in eventHandlers) {
            var handler = eventHandlers[category].handlers;
            for (var event in handler) {
            socket.on(event, handler[event]);
            }
        }
        socket.on('error',function(err){
            console.error(err);
        });
        socket.on('disconnect',function(){
             console.log('disconnect');
        });
    
    }
    

    在您的用户事件处理程序文件(例如 user.socket.js)中:

    var signup = function(){
        var self = this; 
        //TODO: do your code
    };
    
    var authenticate = function(){
    var self = this; 
        //TODO: do your code
    }
    
    exports.UserSocket = function(socket,app){
        this.app = app;
        this.socket = socket;
    
        this.handlers = {
            authenticate:authenticate.bind(this),
            signup: signup.bind(this)
        };
    };
    

    希望有帮助!

    【讨论】:

    • 有趣,我也想过这个问题,我正在使用 TypeScript,所以经常使用 OOP,使用这种模式确实很有意义(我已经为控制器和模型实现了它,并且我的 Api 也是如此),我会在 Api 中编写真正的逻辑,它也将被控制器、套接字和模型使用,因此逻辑只编写一次并且可重用。我这边走,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多