Node.js - Socket.io - 组织套接字的最佳方法是什么?

时间:2014-11-13 11:05:46

标签: node.js sockets oop

我从未使用过socket.io,我想知道我应该如何在我的模型中构建它,目前我打算有一个类 Socket 和另一个 Model < / em>例如,它将派生用于 UserModel

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

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

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

1 个答案:

答案 0 :(得分:3)

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

在我看来,这个实现可能非常难以实现,因为你必须对套接字做一个非常好的抽象,我得到了一个完全不同的方法,我怎么做的是分隔它们的套接字{{ 3}}和责任,假设我有一个套接字文件,只有用户交互其他用于管理活动流(在社交网络的情况下)或管理产品等等。当你看着控制器时,看看它们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');
    });

}

在您的用户事件处理程序文件(ex 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)
    };
};

希望有所帮助!