Socket.io创建连接的参数
我不想花太多口舌向你推销Socket.io,因为我根本就不够资格,也因为根本就不需要,Socket.io目前在Websocket界中的霸主地位就好比当年的PHP~
写这篇的目的,只要是来吐槽Socket.io的官网的!太TM简单的,简直可以用简陋来形容!(难道是我道行太浅?!)
顺便说一句,从github上可以了解到作者马上就要发布 1.0 版本了!期望它的手册会更加丰满一些吧!
简单的从官网上了解完它提供的一些模型后,做个简单的DEMO根本不在话下,对,就是这么简单!但用在项目里的话,就需要对它进行更彻底的把控,我们主要关注在初始化连接时的可选参数细节!
先从 namespaces 开始吧,我更喜欢称之为“频道”。代码比较直观:
var chat = io.connect('http://localhost/chat');
chat.on('connect', function () {
// chat socket connected
});
var news = io.connect('/news'); // io.connect auto-detects host
news.on('connect', function () {
// news socket connected
});
主需要在第一个参数中以url的形式填写即可~~这样我们就可以很好的为客户端管理多个socket连接了,多贴心啊!我都感动哭了!
下面是重头戏:
io.connect(uri, [options]);
这是创建连接的方法,主要看一下可选的第二个参数,从源码中我们可以看到默认设置有哪些:
...
this.options = {
port: 80
, secure: false
, document: 'document' in global ? document : false
, resource: 'socket.io'
, transports: io.transports
, 'connect timeout': 10000
, 'try multiple transports': true
, 'reconnect': true
, 'reconnection delay': 500
, 'reconnection limit': Infinity
, 'reopen delay': 3000
, 'max reconnection attempts': 10
, 'sync disconnect on unload': false
, 'auto connect': true
, 'flash policy port': 10843
, 'manualFlush': false
};
...
主要介绍几个我能看懂的,也比较常用的:
connect timeout
默认值: 5000
作用:设置创建连接所接收的超时时间,单位是毫秒。
try multiple transports
默认值: true
作用:当连接超时后是否允许Socket.io以其他连接方式尝试连接
reconnect
默认值: true
作用:当连接终止后,是否允许Socket.io自动进行重连
reconnection delay
默认值: 500
作用:为Socket.io的重连设置一个时间间隔,内部会在多次重连尝试时采用该值的指数值间隔,用来避免性能损耗(500 > 1000 > 2000 > 4000 > 8000)
max reconnection attempts
默认值: 10
作用:设置一个重连的最大尝试次数,超过这个值后Socket.io会使用所有允许的其他连接方式尝试重连,直到最终失败。
transports
默认值: ['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling']
作用:默认支持的链接方式(顺序敏感)
到目前为止,我们已经可以控制客户端创建连接的细节,如何配置取决于应用本身,比方说明确关闭Socket.io自己的重试策略,转而绑定相关的失败事件( error , disconnect ),根据业务需求进行手动重试等。