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 () {
var news = io.connect('/news');
news.on('connect', function () {
主需要在第一个参数中以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