套接字.IO代码结构:在哪里放置方法
socket.io code structure: where to place methods?
使用套接字时。io库,我有点困惑如何放置不同的方法。
在一个非常简单的聊天应用程序我有server.js
:
io.sockets.on('connection', function(socket) {
//some methods to handle when clients join.
socket.on('text', function(msg) {
socket.broadcast.emit('text', msg);
});
});
和client.js
:
var socket = io.connect();
socket.on('connect', function() {
//some methods to fire when client joins.
socket.on('text', function(msg) {
console.log(msg)
});
});
现在,处理客户端连接时的方法和处理发送和接收消息之后的方法,都放在connect
/connection
事件方法中,无论是在服务器端还是在客户端,但这种结构似乎在客户端也能工作:
var socket = io.connect();
socket.on('connect', function() {
//some methods to fire when client joins.
});
socket.on('text', function(msg) {
console.log(msg)
});
+potentially many more methods...
我的问题是,将方法放在connect方法内部和外部之间的根本区别是什么,什么被认为是最好的选择?
当你调用这个时,
socket.on('xyz', function listener() {});
您监听事件 xyz
并添加函数listener
作为事件处理程序。只要出现xyz
,它就执行。所以当你这样做的时候:
socket.on('connect', function() {
socket.on('text', function(msg) {
console.log(msg)
});
});
text
的事件处理程序/监听程序仅在connect
事件发生时添加(connect事件处理程序被执行)。在connect
发生之前只有一个监听器,在connect
发生时有两个(多一个)监听器。但是当你这样做的时候:
socket.on('connect', function() {
//some methods to fire when client joins.
});
socket.on('text', function(msg) {
console.log(msg)
});
在连接发生之前/之后,任何时候都有两个监听器。
前一种方法更有效,更符合逻辑。因为text
不可能在connect
发生之前发生,所以为什么要听它呢?像在事件循环中一样高效,不需要寻找不必要的事件。添加太多的事件可能不会造成太大的伤害,但对于性能关键型应用程序来说,这可能是一种拖累。后一个看起来不错,所有事件处理程序一个接一个地放置。
相关文章:
- 在哪里使用名为“;冻结”;
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- Ember.js-接口状态应该存储在哪里
- 在Redux中,我应该在哪里编写复杂的异步流
- 如何防止jQueryonclick事件中的Ruby方法在页面刷新时执行
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 在哪里可以找到RXUI Javascript'时间飞逝'实例
- Sequelize:这些方法应该驻留在哪里
- 在Node.js中,我在哪里可以看到JavaScript方法的源代码,例如hasOwnProperty
- 在哪里可以找到 JQuery 方法的实际代码
- 在哪里可以找到javascript对象的所有方法的列表
- Mootools存储方法:数据存储在哪里
- 套接字.IO代码结构:在哪里放置方法
- Shadowbox的buildObject()方法在哪里?
- Codeigniter(重新安排).如果它在侧边栏上,我应该在哪里/如何编写登录方法
- 我在哪里可以找到一个完整的列表有效的方法为给定的谷歌应用程序服务类
- 我在哪里可以找到uitarget类的所有方法
- Javascript -在哪里找到/提出新方法
- 在哪里可以找到“;javascript”;V8 DOM方法实现的源代码(document.createElement()
- 在scaleApp.js框架中定义的沙盒方法(如sb.getContainer(),sb.getModel())在哪里