热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

什么是websocket和websocket使用

websocket的理解1.websocket是什么?websocket是一种网络通信协议(和我们最常用的http一样)websocket是HTML5开始提供的一种在单个TCP链接

websocket 的理解


1.websocket是什么?

websocket 是一种网络通信协议(和我们最常用的 http 一样)

websocket 是 HTML5 开始提供的一种在单个 TCP 链接上进行双全工通讯的协议


2.为什么需要 websocket?

 初次接触 websocket 的人都会有一个疑问,既然我们已经有了 http 协议,那为什么还要websocket 协议?它有什么优势?

答案很简单,它能补足 http 协议的一些缺陷。


1.http 协议通信只能由客户端发起。

举例来说,我们想了解今天的实时天气,只能由客户端向服务器发送查询请求,服务器返回查询结果,http 协议做不到服务器主动向客户端推送信息。

如下图所示,http通信过程:

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端就无法实时获取相应的状态信息。想要获取相应的状态信息,只能采取轮询的方式,效率低,且浪费资源。


 2.无状态保存

HTTP 是一种不保存状态,即无状态协议。HTTP 协议自身不对请求和响应之间的通信状态进行保存。也就是说在 HTTP 这个级别,协议对于发送过的请求或者响应都不做持久化处理。

 


 3,WebSocket的优势

相对于传统 HTTP 每次请求-应答都需要客户端与服务端建立连接的模式,WebSocket 是类似 Socket 的 TCP 长连接通讯模式。一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。在客户端断开WebSocket 连接或服务端中断连接前,不需要客户端服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接收消息是在同一个持久连接上发起,实时性优势明显。


websocket 的基本使用(记住四个属性,一个方法)

WebSocket需要像 TCP 一样,先建立连接,需要客户端和服务端进行握手连接,连接成功后才能相互通信。

H5内置的 Websocket 构造函数

WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例

const ws = new WebSocket("ws:127.0.0.1:8080")

执行上面语句之后,客户端就会与服务器进行连接


webSocket.onopen 

实例对象的 onopen 属性,用于指定连接成功后的回调函数

ws.Onopen= () => {
console.log("websocket连接成功")
}

webSocket.onerror

实例对象的 onerror 属性,用于指定连接发生错误的回调函数

ws.Onerror= () => {
console.log(
"websokect连接发生错误")
}

webSocket.onmessage

实例对象的 onmessage 属性,用于指定收到服务器数据后的回调函数

ws.Onmessage= (data) => {
console.log(data)
//data为收到的服务器数据
}

webSocket.onsend()

实例对象的 onsend 方法,用于向服务器发送数据。

ws.send("your message")

webSocket.onclose

实例对象的 onclose 属性,用于指定连接关闭后的回调函数

ws.Onclose= () => {
console.log(
"websocket连接关闭")
}

总结:

  websocket 的产生主要是为了弥补http协议的不足,实现客户端和服务器的持久连接,以及实时双向通信。


作者: 默然晴天

博客地址:http://www.cnblogs.com/bryanfu/


本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出,

原文链接

如有问题, 可邮件(fukangkobe@163.com)咨询.



推荐阅读
  • 本文探讨了在使用HTML5 WebSocket技术构建浏览器内聊天室时遇到的连接不稳定问题,并提供了可能的解决方案和调试方法。 ... [详细]
  • 经过一段时间的学习与实践,我已经使用D3.js完成了一些项目。鉴于中文D3教程稀缺,而英文资料虽丰富却对英语水平有一定要求,特此撰写一系列D3实战文章,旨在通过具体案例(如统计数据可视化、地图信息展示等)分享D3的使用技巧,促进技术交流。 ... [详细]
  • 本文探讨了 Java 中 HttpClient 和 HtmlUnit 的区别,重点介绍了它们的功能和应用场景。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
author-avatar
西羽易
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有