专栏首页coder修行路WebSocket 理论知识整理

WebSocket 理论知识整理

最近工作用到websocket, 之前虽然也用到了一些简单的东西,但是并没有认真整理一下。所以这次准备了解一下WebSocket.

WebSocket产生的背景

WebSocket是一种在单个TCP连接上进行全双工通信的协议. 这意味着双方可以同时进行通信和交换数据

对于我们都非常熟悉的HTTP协议,通信只能通过客户端发起,无法做到服务器主动向客户端推送消息 这样如果在服务端出问题的时候,客户端想要知道就比较麻烦,笨的办法就是我们采用轮询的方式,每隔一段时间问一下服务端:“喂,你还在么,你怎么样了,还没死吧?” 从而来确定服务端的一些状态变化。

关于轮询:其实就是客户端在指定的时间间隔向服务器发送请求

但是我们都知道这种笨办法是非常浪费资源的。而WebSocket也可以说就是这样诞生了

为什么我们需要web socket

Internet was conceived to be a collection of Hypertext Mark-up Language (HTML) pages linking one another to form a conceptual web of information. During the course of time, static resources increased in number and richer items, such as images and began to be a part of the web fabric. Server technologies advanced which allowed dynamic server pages - pages whose content was generated based on a query. Soon, the requirement to have more dynamic web pages lead to the availability of Dynamic Hypertext Mark-up Language (DHTML). All thanks to JavaScript. Over the following years, we saw cross frame communication in an attempt to avoid page reloads followed by HTTP Polling within frames. However, none of these solutions offered a truly standardized cross browser solution to real-time bi-directional communication between a server and a client. This gave rise to the need of Web Sockets Protocol. It gave rise to full-duplex communication bringing desktop-rich functionality to all web browsers.

WebSocket 长啥样 ?

我们还是用HTTP来对比,我们通常访问一个网站如google,我们会在浏览器中输入: http://www.google.com 或者: https://www.google.com

其实webSocket和http也非常类似,如下图:

web socket 是HTML5 规范的一部分, 允许网页和远程主机之间进行全双工通信,该协议实现以下好处:

通过单个连接而不是两个连接使用全双工减少不必要的网络流量和延迟 通过代理和防火墙进行流式传输,同时支持上游和下游通信

websocket 和http 对比

websockets 角色

Events and Actions

有四个主要的API events Open Message Close Error

每一个事件都分别通过实现onopen onmessage onclose 和onerror函数来处理

Open 一旦客户端和服务器之间建立了连接,就会从web socket 实例触发open 事件,这个被称为客户端和服务器之间的初始握手 一旦建立连接就会触发的事件称为onopen事件

Message 通常发生在服务器发送一些数据的时候触发该消息事件 服务器发送给客户端的消息可以包括纯文本消息,二进制数据或者图像。但是无论哪种数据都会触发onmessage函数

close 该事件标志着服务器和客户端之间通信结束 当触发onclose事件之后可以关闭连接,同时标记中通信结束,服务器和客户端之间无法进一步传输消息

error onerror 事件之后总是随后终止连接

Actions

当我们想要发生某事件的时候做一些操作,通过用户显示调用的方法有: send() close()

参考连接:http://www.ruanyifeng.com/blog/2017/05/websocket.html https://www.tutorialspoint.com/websockets/index.htm

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go实现海量日志收集系统(一)

    项目背景 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 当系统机器比较少时,登陆到服务器上查看即可满足 当系统机器规模巨大,登陆到机器上查看几乎不现...

    coders
  • python成长之路-----day1-----作业(登录程序和三级菜单)

    作业: 作业1:用户登录 1)程序说明: a.用户输入密码验证成功然后打印欢迎信息 b.如果密码错误,用户登录失败,提示用户,密码错误 c.用户输入密码错误3次...

    coders
  • python成长之路-----day1----笔记(1)

    1、python语言介绍 python的创始人:Guido Van Rossum 2、python是一门什么样的语言 编程语言主要从以下几个角度进行分类:编译型...

    coders
  • 个性化合作学习:一种关注协作的机制(CS ML)

    针对物联网/边缘计算的挑战性计算环境,个性化的合作学习可以让每一个客户端以保护隐私的方式与其他客户端有效协作,以训练出强大的个性化云模型。个性化合作学习的性能在...

    Rosalie
  • AlexNet论文总结

    Introduction Preconditions ImageNet Objects in realistic settings exhibit cons...

    Tyan
  • 具有参数化数据的Petri网:建模和验证(扩展版)(CS AI)

    在过去的十年中,已经提出了各种方法来将业务流程与不同类型的数据集成在一起。每种方法都反映了整个过程数据集成范围内的特定需求。一个特别重要的一点是,这些方法能够灵...

    刘子蔚
  • 过载惩罚下的最优负载均衡需求分配(CS CY)

    本文讲述到负载均衡需求分布(LBDD)的输入包括:(a)一组服务中心;(b)一套需求节点;(c)包含每对(需求节点、服务中心)分配成本的成本矩阵。此外,每个服务...

    啊瓜7706942
  • vae 相关论文 表示学习 1

    05 Nov 2016 (modified: 18 Apr 2017)ICLR 2017 conference submissionReaders: Ever...

    用户1908973
  • 知识图谱中什么是正常的什么是奇怪的以及缺少什么(CS AI)

    知识图谱(KGs)在图谱的结构中存储了关于世界的高度异构的信息,对于回答问题和推理等任务非常有用。然而,它们经常包含错误和丢失信息。知识图谱精准化的活跃研究已经...

    RockNPeng
  • 为 UCCA 优化隐式参数注释(cs.CL)

    很少有资源代表自然语言理解的隐含角色,而 NLP 中的现有研究只是粗略地区分了语言形式中省略的参数类别。在本文中,我们设计了一个类型学,用于在通用概念认知注释的...

    Donuts_choco

扫码关注云+社区

领取腾讯云代金券