在socket.io.js客户端的源码里面,关于io(url)有这么一段解释:
/**
* Looks up an existing `Manager` for multiplexing.
* If the user summons:
*
* `io('http://localhost/a');`
* `io('http://localhost/b');`
*
* We reuse the existing instance based on same scheme/port/host,
* and we initialize sockets for each namespace.
*
* @api public
*/
所以,使用io(url)是要优于io.connect(url)的。
在调试页面js的时候,发现创建连接的过程是首先polling,后面再socket的,一开始以为是客户端并发的向server端发起不同类型的请求,server端再根据优先级来进行判断来建立某个类型的连接,是websocket ? 还是 polling ?
后来在socket.io.js下面一个初始化socket参数的时候,对于transports是这样设置的:
this.transports = opts.transports || ['polling', 'websocket'];
当参数中的transports 为空的时候,默认为:['polling', 'websocket'],这样那么就觉得很奇怪,并不是按照官网上面所说的那么个顺序:
['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling'],所以我将其修改为:
this.transports = opts.transports || ['websocket', 'flashsocket', 'htmlfile', 'xhr-multipart', 'xhr-polling', 'jsonp-polling'];
那么这样,现在每次都是首先建立websocket的连接了,就有了一个连接上的顺序了。
如有误,请指正。谢谢!