查看原文
其他

WebSocket原理及如何使用

翻译 张春 新钛云服 2022-01-05

它有很多名字; WebSocket,WebSocket协议和WebSocket API。从首选的消息传递应用程序到流行的在线多人游戏,WebSocket在当今最常用的Web应用程序中是至关重要的。


根据定义,WebSocket是通过单个TCP连接提供全双工(双向通信)通信信道的计算机通信协议。此WebSocket API可在用户的浏览器和服务器之间进行双向通信。用户可以向服务器发送消息并接收事件驱动的响应,而无需轮询服务器。 它可以让多个用户连接到同一个实时服务器,并通过API进行通信并立即获得响应。

WebSockets允许用户和服务器之间的流连接,并允许即时信息交换。在聊天应用程序的示例中,通过套接字汇集消息,可以实时与一个或多个用户交换,具体取决于谁在服务器上“监听”(连接)。


WebSockets不仅限于聊天/消息传递应用程序。它们适用于需要实时更新和即时信息交换的任何应用程序。一些示例包括但不限于:现场体育更新,股票行情,多人游戏,聊天应用,社交媒体等等。


WebSockets还会考虑代理和防火墙等危险,使得任何连接都可以进行流式传输。它支持单个连接的上游和下游通信。 它还减轻了服务器的负担,允许现有机器支持同时连接。


这是现代Web应用程序中的示例实现WebSockets。在下面的示例中,我使用WebSockets作为带有Rails 5 API后端和React.js前端的即时消息应用程序。这绝不是一个指南,而是一个如何使用它的例子。我使用了Action Cable,它是Rails的包装器,可以无缝地集成Ruby中WebSockets的主要功能,并允许在整个域模型中轻松实现。 它内置于Rails 5.2中,因此无需安装/执行任何外部库或gem。


它的工作原理是Pub-Sub(发布和订阅)。它适用于发送者将数据(发布者)发送给抽象数量的收件人(订阅者),而无需指定他们是谁。


第一步是将服务器挂载到路由文件中,这样前端就可以从流中得到endpoint:

在第5行,我设置了ActionCable服务器端点


下一步是在后端创建一个通道,以便在实时创建消息时对消息进行流式处理。

这是管理消息创建以及广播消息的消息通道


这里我们有两种方法,订阅和接收。订阅的第一种方法允许将消息通道流式传输到连接的用户或订户。 接收的第二种方法管理消息创建和广播消息。我实现了JWT用户身份验证,以便可以将消息追溯到用户,只有具有有效用户帐户的消息才能创建消息。


对于我的应用程序的前端,我使用它们npm package actioncable从客户端到服务器端连接到WebSocket API。 这个包直接来自于Rails的团队。 使用此库,我实例化了一个cableApp实例,并将其作为props传递给需要访问WebSocket连接的组件。

导入actionCable并创建了一个cableApp实例,然后将cableApp连接到我的后端端点“/ cable”并将其传递给需要连接的组件


然后,我通过React.js生命周期方法componentDidMount()连接到WebSocket的连接,并在每次将组件安装到DOM时建立连接。

在componentDidMount()中,我建立了客户端以连接到WebSocket协议,该协议从我的Rails API中的“messagesChannel”流式传输。


现在,每次创建消息并将其发送到接收方法时,订阅(d)用户将立即接收并能够实时查看消息。此实现支持订阅同一频道的多个用户。因此,如果多个用户签名并订阅了相同的频道,他们可以发送所有订阅者都能看到的消息以及从其他订阅者接收消息。当然,你可以限制为两个人,并使它成为p2p,但是那样还有什么乐趣呢?


我希望通过阅读本文,可以看到WebSockets的潜力。它使自己成为一个宝贵的资源,在这个时代,信息交换需要很快完成。 希望读者将在自己的项目中实现它们。


原文地址:

https://medium.com/@jamesjacobthomas7/websockets-and-how-i-used-them-a-quick-glance-37899b697852


了解新钛云服

新钛云服超预期完成第一阶段目标,启动新一轮融资,迎接下一轮挑战!

厉害了,新钛云服在2018博鳌企业论坛上连获三项大奖!

新钛云服CEO冯祯旺受邀出席华东互联网峰会并发表演讲

从盛大游戏G云COO到独自创业!2018中国财经峰会专访新钛云服CEO冯祯旺

刚刚,新钛云服荣获中国财经峰会2018最具投资价值奖!

新钛云服,打造最专业的Cloud MSP+,做企业业务和云之间的桥梁

王者归来,Linux运维专家胥峰加入新钛云服!

听说,这家公司的展台直接送股票!

没错,我们就是这样豪!GOPS送小爱、整箱签名书、数百定制笔记本和手机支架

新钛云服架构师祝祥获得华为精英赛优胜奖


新钛云服出品的精品技术干货

OpenStack R版部署及VPC配置详解!

八个伟大的工具,使Docker更好!

mysqldump备份详解

使用FieleRader API创建VUE.JS文件读取器组件

用Audit守护进程配置和审计Linux系统

开源搜索引擎solr介绍

使用Sensu简单有效地监控云基础架构

Ceph杀手锏CRUSH和主流分布式存储一致性哈希算法

开源搜索引擎solr介绍

运维人的终身成长,从清单管理开始|万字长文!

ASP.Net性能监控和优化入门

Oracle的RMAN恢复经验分享

99%运维不知道,系统文件md5变了,竟然是因为......

超实用,物理服务器RAID扩容详解

OpenStack Rocky:专注于裸机云管理,快速升级以及硬件加速

Chef进行自动化和编排的优缺点分析

高效的容器使用需要软件定义的数据中心

Ceph BlueStore 与 FileStore:利用 Micron NVMe SSD 进行性能比较

django快速上手指南

OpenStack与ZStack深度对比:架构、部署、计算存储与网络、运维监控等

孩子通CTO李文杰:孩子通运维2.0的升级之路。

什么是云原生?

IT混合云战略:是什么、为什么,如何构建?

运行Docker:物理机vs虚拟机,五方面详细对比!



 



由腾讯蓝鲸和新钛云服联合举办的

运维开发-腾讯蓝鲸社区沙龙

火热报名中

寻找运维新大陆

是分享,是交流

更是成长!


(长按识别二维码报名,或者点击阅读原文报名)

: . Video Mini Program Like ,轻点两下取消赞 Wow ,轻点两下取消在看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存