添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

http://www.kazaff.me/2014/03/12/socket-io%E5%88%9B%E5%BB%BA%E8%BF%9E%E6%8E%A5%E7%9A%84%E5%8F%82%E6%95%B0/

我不想花太多口舌向你推销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 ),根据业务需求进行手动重试等。

使用walle 搭建自动发布工具 walle发布部分使用flask-socket.io通信,模拟流程需要使用websocket node 的 socket.io-client 做为客户端 const socketIo = require('socket.io-client') const baseHost = 'http://localhost:8888' let cooki...
由于项目要求客户端app和服务器端建立socket连接,用于接收服务器端推送的消息。由于服务器端已经使用了Socket.iO库,所以我在iOS就选择了Socket.IO-Client-Swift的框架。其他框架已经很久没有维护所以放弃。在导入和使用过程中遇到了一些问题。1、oc项目引用Swift的框架Socket.IO-Client-Swift ; 2、连接过程的设置参数传递。 第一步导入S...
今天出了个状况 我在做一个任务的时候出现了一个很诡异的情况 一个接口 本来应该只被调用一次 但是打断点发现被调用了三次 前两次参数都是正确的 第三次的参数socket.io.js 怎么查都查不到原因 后来灵机一动 因为接口还没做好 我之前是直接在数据库插数据来调试页面的 我记得有一条记录没搞全 我把这个残缺的记录删掉之后果然就好了 但是为什么记录查询的有问题就会重复调用呢 而且参数还这么奇怪...
Socket.io 服务端运行后会在根目录动态生成socket.io的客户端js文件 客户端可以通过固定路径/socket.io/socket.io.js添加引用 <script type="text/javascript" src="/socket.io/socket.io.js"></script> emit函数有两个参数 第一个参数是自定义的事件名...
@hyoga/uni-socket 重写 socket.io-client 的 engin.io-client 处理件,h5 依旧使用原生 WebSocket,APP 与小程序使用 uni-app 的 WebSocket 协议,所以 h5 端任然可以支持长轮询等方式,APP 与小程序只能支持 WebSocket 协议。 // 建议使用npm或yarn包形式引入以保证插件的更新迭代 npm i @hyoga/uni-socket.io --save // yarn add @hyoga/uni-socket.io 使用本插件,请注意插件版本与服务端 socket.io 版本要匹配,否则将会出现无法连接服务器的问题。 uni-socket 版本 服务端 socket.io 版本 import io from '@hyoga/
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties
server端的socket.io中有两个连接事件.一个是.on('connect'),一个是.on('connection'). 官网上没有对这两个事件的区别进行解释. 那么这两个事件有什么区别呢? 使用起来似乎没有什么差别哎? 笔者就2.0.4版本的socket.io进行实验. 这段代码搭建起了一个最简单的socket.io...
‘mvn’ is not recognized as an internal or external command, operable program or batch file. 11751