为什么需要 WebSocket协议?

WebSocket是HTML5一种新的协议,WebSocket是真正实现了全双工通信的服务器向客户端推的互联网技术,是一种在单个TCP连接上进行全双工通讯协议。

全双工通讯协议的概念

全双工是通讯传输的一个术语。通信允许数据在两个方向上同时传输,他在能力上相当于两个单工通信方式的结合。全双工指可以同时进行信号的双向传输。

  • 全双工:例如我们使用的手机就是全双工,在同一时刻两个用户可以同时给对方传送数据

  • 半双工:例如我们使用的对讲机,当A方按住通话按钮才可以向B方传送数据,B方也是,在同一时刻只有一个用户能够传送数据(A/用户都可以传递信息,但是不能够同时传递)

  • 单工:例如我们看电视时,我们只能接收对方发送的信息,不能够给对方传递信息;

在这里插入图片描述

UDP和TCP协议的概念

TCP是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

websocket应用场景?

1、社交订阅

2、多玩家游戏

3、协同编辑文档

4、数据流状态

5、多人聊天

🎉websocket有哪些特点?

================================================================================

  • 与http协议有良好的兼容性;

  • 建立在TCP协议之上,和http协议同属于应用层;

  • 数据格式比较轻量,性能开销小,通信高效;

  • 可以发送文本,也可以发送二进制;

  • 没有同源限制,可以与任意服务器通信。

http和websocket的区别?

http协议是短链接,因为请求之后,都会关闭连接,下次请求需要重新打开链接。

websocket协议是一种长连接,只需要通过一次请求来初始化连接,然后所有请求和响应都是通过TCP链接进行通信。

websocket和socket的区别?

socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。而websocket协议是一个完整的应用层协议,拥有一套完整的API。

💰WebSocket中的常用注解有哪些?

====================================================================================

@ServerEndpoint :类似与servlet中的 RequestMapping

@OnOpen:类似与servlet中的 init()初始化

@OnClose:类似与servlet中的destroy() 销毁

@OnMessage:类似于servlet中的service请求 (意思就是发送数据的方式 @doPost()/ @doGet() 组合)

🚀服务端实时通信有哪些方法?

==============================================================================

1、AJAX轮询

2、Long Polling长轮询

3、WebSocket

📖客户端的 API

=========================================================================

WebSocket 客户端的 API 如下。

WebSocket 构造函数

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

var ws = new WebSocket(‘ws://localhost:8080’);

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

实例对象的所有属性和方法清单,参见这里

webSocket.readyState返回实例对象的当前状态

readyState属性返回实例对象的当前状态,共有四种。

  • CONNECTING:值为0,表示正在连接。

  • OPEN:值为1,表示连接成功,可以通信了。

  • CLOSING:值为2,表示连接正在关闭。

  • CLOSED:值为3,表示连接已经关闭,或者打开连接失败。

下面是一个示例。

switch (ws.readyState) {

case WebSocket.CONNECTING:

// do something

break;

case WebSocket.OPEN:

// do something

break;

case WebSocket.CLOSING:

// do something

break;

case WebSocket.CLOSED:

// do something

break;

default:

// this never happens

break;

}

webSocket.onopen连接成功后的回调函数

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

ws.onopen = function () {

ws.send(‘Hello Server!’);

}

如果要指定多个回调函数,可以使用addEventListener方法。

ws.addEventListener(‘open’, function (event) {

ws.send(‘Hello Server!’);

});

webSocket.onclose连接关闭后的回调函数

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

ws.onclose = function(event) {

var code = event.code;

var reason = event.reason;

var wasClean = event.wasClean;

// handle close event

};

ws.addEventListener(“close”, function(event) {

var code = event.code;

var reason = event.reason;

var wasClean = event.wasClean;

// handle close event

});

webSocket.onmessage收到服务器数据后的回调函数

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

ws.onmessage = function(event) {

var data = event.data;

// 处理数据

};

ws.addEventListener(“message”, function(event) {

var data = event.data;

// 处理数据

});

注意,服务器数据可能是文本,也可能是二进制数据(blob对象或Arraybuffer对象)。

ws.onmessage = function(event){

if(typeof event.data === String) {

console.log(“Received data string”);

}

if(event.data instanceof ArrayBuffer){

var buffer = event.data;

console.log(“Received arraybuffer”);

}

}

除了动态判断收到的数据类型,也可以使用binaryType属性,显式指定收到的二进制数据类型。

// 收到的是 blob 数据

ws.binaryType = “blob”;

ws.onmessage = function(e) {

console.log(e.data.size);

};

// 收到的是 ArrayBuffer 数据

ws.binaryType = “arraybuffer”;

ws.onmessage = function(e) {

console.log(e.data.byteLength);

};

webSocket.send()向服务器发送数据

实例对象的send()方法用于向服务器发送数据。

发送文本的例子。

ws.send(‘your message’);

发送 Blob 对象的例子。

var file = document

.querySelector(‘input[type=“file”]’)

.files[0];

ws.send(file);

发送 ArrayBuffer 对象的例子。

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

[外链图片转存中…(img-y4eM6bmi-1715069535588)]

[外链图片转存中…(img-JjEDZ6TJ-1715069535589)]

[外链图片转存中…(img-NPVT7gf0-1715069535589)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值