前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WebSocket 系列之 ws

WebSocket 系列之 ws

原创
作者头像
肖乐
发布2017-10-10 10:23:51
4.7K0
发布2017-10-10 10:23:51
举报
文章被收录于专栏:肖乐的专栏肖乐的专栏

导语 上篇说了socket.io,这篇开始讲下ws库,如果说socket.io是大而全,那ws就是小而美

ws简介

1.纯WebSocket实现,不支持降级轮询,适用移动端开发

2.api简单易懂,client没有限制,可以用原生的

3.心跳检测,断线重连,多机多进程自由定制

ws server

[image.png]
[image.png]

说明:

1.因为没有降级使用轮询,也就没有一个socket连接由多次http request组成,所以多机多进程很好实现,跟http server一样

2.WebSocket server不能独立存在,必须绑在http server上,因为WebSocket建立连接依赖的http请求,如果你没有手动绑定,库里会自动创建一个http server

ws应用

背景:

去年微信小程序出来的时候,提供了WebSocket应用的api,但是WebSocket server端仍需要用户自己去搭建,门槛还是比较高的,鉴于此,腾讯云提供了一个打包方案,封装了技术细节(包括WebSocket),用户可以直接使用简单友好的sdk开发自己的小程序,这个打包方案里的WebSocket通道服务即由我负责开发实现。

选型:

因为小程序只在微信里打开,都是支持WebSocket的,无需降级使用轮询,所以我放弃了繁琐的socket.io,选择ws

架构图:

[image.png]
[image.png]

说明:

1.因为是多机多进程实现,每个进程都会监听一个私有端口,上图中的12801-12804,是为了实现广播功能,后面说明。

2.用户先调nodejs提供的cgi拉取带唯一id(作为信道id)的WebSocket url,再通过该url与nodejs建立连接,此时node会在cmem里存储该连接所在serve ip以及监听的私有端口,并通过业务服务器提供的cgi转发消息到业务服务器

3.如果要push消息,业务服务器调用nodejs提供的消息发送cgi,带上消息内容和要push的信道id,nodejs收到push 请求,从cmem中查询信道id所在server ip和私有port,将消息转发过去,WebSocket server 再调用对应WebSocket 连接将消息push到client

心跳检测:

1.server每隔10s发送心跳包给client,client即时发送响应包给server,server连续20s没有收到响应,则认为client退出了,server断开连接

2.client连续20s没有收到心跳包,认为连接失效,发起重连

广播:

1.根据tunnelId决定广播的信道

2.收到广播的server根据tunnelId通过私有端口转发广播内容到对应机器的worker进程

3.worker进程调用WebSocket连接句柄发送广播内容

STGW配置:

STGW作为统一接入层,在转发WebSocket请求时默认没有转发Connection:Upgrade和Upgrade:websocket header,这样server端接收到的就不是WebSocket请求了,所以我们必须在配置location时手动加上这两个header,如下图:

[image.png]
[image.png]

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ws简介
    • ws server
    • ws应用
      • 背景:
        • 选型:
          • 架构图:
            • 心跳检测:
              • 广播:
                • STGW配置:
                相关产品与服务
                云开发 CloudBase
                云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                http://www.vxiaotou.com