我从未使用过socket.io,我想知道我应该如何在我的模型中构建它,目前我打算有一个类 Socket 和另一个 Model < / em>例如,它将派生用于 UserModel 。
然后,在 UserModel.authenticate()上,我会调用套接字将我的用户添加到某个房间。
我只是想知道它是否可行,或者我是否应该尊重某种设计模式,或者我的设计是否错误。 (对套接字没有落后的经验,所以最好问一下有些人!)
如果您知道更好的方法或某种示例,请告诉我,我认为这很简单,但我可能错了。
答案 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)
};
};
希望有所帮助!