如何在公司项目中使用 WebSocket— 入门实战指南
本文从 WebSocket 基础概念出发,介绍在实际开发中从本地联调到部署上线的流程以及注意事项,让 WebSocket 小白以最小成本应用到项目中。
一、WebSocket 基础
1、什么是 WebSocket
2、对比 http
- 两者都位于应用层,都依赖TCP协议
- WebSocket 协议一般以ws://或wss://开头
- HTTP 不支持全双工通信,一般使用轮询方式
3、WebSocket 基础用法
兼容性:
https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket
一个简单的 Demo
(视频详见原文)
客户端可以在控制台 -network-ws下看到 WebSocket 消息
注意请求头里的几个关键字段
- 请求地址为 ws:// 或 wss:// 开头
- Connection 必须设置 Upgrade,表示客户端希望连接升级
- Upgrade字段必须设置 WebSocket,表示希望升级到 WebSocket 协议。
- 如果服务端支持 websocket,会在响应头中返回相同的信息,并且连接状态置为101(协议切换成功
二、如何在项目中使用 WebSocke
下面以一个实际项目为例,展示如何实现一个WebSocket接口,包含开发->联调->部署→上线整个流程。
1、开发环境
将上面的 Demo简单封装一下,在项目中调用如下:
配置 webpack 代理
说明:
- WebSocket接口要和http接口分开
- 域名使用location.host并且通过反向代理转发,目的是保留cookie和头信息。
2、心跳检测&断线重连
为了保证连接稳定,需要考虑一些异常情况,如网络波动导致连接中断,服务器超时等。
心跳检测即客户端定时向服务端发送心跳消息,保持连接稳定;
断线重连即发送消息前,检测连接状态,若连接中断,尝试n次连接;
封装如下:
也可选择第三方库处理。
3、Nginx配置
The WebSocket protocol is different from the HTTP protocol, but the WebSocket handshake is compatible with HTTP, using the HTTP Upgrade facility to upgrade the connection from HTTP to WebSocket.
This allows WebSocket applications to more easily fit into existing infrastructures.
For example, WebSocket applications can use the standard HTTP ports 80 and 443, thus allowing the use of existing firewall rules.
location /websocket { proxy_pass http://xx.xxx.xx.xx; # websocket服务器。不用管 ws:// proxy_http_version 1.1; # http协议切换 proxy_set_header Host $host; # 保留源信息 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; # 请求协议升级,如果生产环境有报400错误,可以尝试将值设置为websocket proxy_set_header Connection $connection_upgrade; }
三、其他
sockiet.io
sockiet.io 是基于 Node 的实时应用程序框架,对比原生 WebSocket,封装了更多通用能力,且在不支持WebSocket的浏览器上,可以降级为轮询方式通信。
优点:成熟,开箱即用,兼容性好。
缺点:体积较大,前后端必须统一,即后端使用 socket.io 则前端必须使用 socket.io-client 对应。
作者:vivo 商业化大前端团队

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
4982亿背后的前端技术—2020天猫双11前端体系大揭秘
今年双11的整体节奏从之前的“光棍节”变为“双节棍”,具体业务上也有很多变化和调整,应了阿里的土话“唯一不变的是变化”。面对这些变化,是挑战也是机会,我们要做的就是,“既要”高效支撑保障业务先赢,“又要”确保体验和稳定性带给用户极致体验,“还要”追求创新让前端持续演进。为了实现“既要、又要、还要”,包括技术方案、流程机制、人员组织等各方面都进行了大量的设计和保障。最终第一次双峰的双11圆满结束,淘系前端也实现了自己的目标,包括应用大量优化手段和创新方案带来业务转化提升;将FaaS、PHA、ESR等技术应用在更多场景,分别向服务端、客户端、CDN节点进一步拓展了前端的能力和边界;应用视觉还原、一体化研发等提升研发效率,大幅缓解资源瓶颈等等。下面会整体介绍一下淘系前端在今年双11的思考和沉淀,希望对大家有所助益。后续也会有各个专项的系列文章,希望大家持续关注。 变化 & 挑战 今年的双11,首先感受到的就是源源不断的变化。 单峰变双峰:双11从之前的一个波段变成今年的两个波段,大促的三个阶段预售、预热、正式也都对应的翻倍。首先带来的是研发工作量的大幅增加,在时间排期不变、工作量增加...
- 下一篇
Spring源码分析之AOP从解析到调用
点击上方蓝色“奇客时间”,选择“设为星标” 回复“公司名-部门-面试轮次”获取面试真题,详见文章底部 往期文章: Spring源码分析之预启动流程 Spring源码分析之BeanFactory体系结构 Spring源码分析之BeanFactoryPostProcessor调用过程详解 Spring源码分析之Bean的创建过程详解 Spring源码分析之循环依赖及解决方案 正文: 在上一篇,我们对IOC核心部分流程已经分析完毕,相信小伙伴们有所收获,从这一篇开始,我们将会踏上新的旅程,即Spring的另一核心:AOP! 首先,为了让大家能更有效的理解AOP,先带大家过一下AOP中的术语: 切面(Aspect):指关注点模块化,这个关注点可能会横切多个对象。事务管理是企业级Java应用中有关横切关注点的例子。在Spring AOP中,切面可以使用在普通类中以@Aspect注解来实现。 连接点(Join point):在Spring AOP中,一个连接点总是代表一个方法的执行,其实就代表增强的方法。 通知(Advice):在切面的某个特定的连接点上执行的动作。通知有多种类型,包括 aroun...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启