- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE1
PAGE1
WebSocket通信基础
1WebSocket协议简介
WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。它被设计用于替代HTTP的长轮询技术,以实现更高效、低延迟的实时数据传输。WebSocket在客户端和服务器之间建立了一个持久的连接,允许数据在任意方向上进行传输,这使得实时交互应用如在线游戏、实时聊天、股票价格更新、实时文件同步等成为可能。
1.1特点
全双工通信:WebSocket支持客户端和服务器之间的双向通信,无需每次通信都建立新的连接。
低延迟:由于连接是持久的,所以通信延迟较低,适合实时数据传输。
状态保持:WebSocket连接保持打开状态,服务器可以记住每个连接的客户端状态,从而实现更复杂的交互。
多路复用:多个WebSocket连接可以复用同一个TCP连接,减少网络开销。
2WebSocket与HTTP的区别
2.1连接方式
HTTP:基于请求/响应模型,每次通信都需要建立新的连接,通信结束后连接关闭。
WebSocket:基于持久连接,一旦建立连接,客户端和服务器可以持续通信,直到一方主动关闭连接。
2.2数据传输
HTTP:数据传输是基于文本的,通常使用XML或JSON格式。
WebSocket:可以传输文本和二进制数据,支持更广泛的数据类型。
2.3协议状态
HTTP:无状态协议,服务器不保存关于客户端的任何信息。
WebSocket:有状态协议,服务器可以保存关于客户端的连接状态和数据。
3WebSocket通信流程
WebSocket通信流程主要分为握手阶段和数据传输阶段。
3.1握手阶段
握手阶段是通过HTTP升级请求完成的。客户端首先发送一个HTTP请求,请求将连接升级为WebSocket协议。服务器接收到请求后,如果同意升级,则会发送一个特定的响应,完成握手过程。
3.1.1客户端请求示例
importwebsocket
defon_open(ws):
print(###opened###)
ws.send(Hello,Server)
ws=websocket.WebSocket()
ws.on_open=on_open
ws.connect(ws:///)
3.1.2服务器响应示例
importtornado.web
importtornado.websocket
importtornado.ioloop
classEchoWebSocket(tornado.websocket.WebSocketHandler):
defopen(self):
print(WebSocketopened)
defon_message(self,message):
self.write_message(uYousaid:+message)
defon_close(self):
print(WebSocketclosed)
application=tornado.web.Application([
(r/ws,EchoWebSocket),
])
if__name__==__main__:
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
3.2数据传输阶段
握手成功后,客户端和服务器可以开始发送和接收数据。数据可以是文本或二进制格式。
3.2.1发送数据示例
#客户端发送数据
ws.send(Hello,Server)
#服务器发送数据
self.write_message(uYousaid:+message)
4WebSocket数据帧格式
WebSocket数据帧是WebSocket通信中数据传输的基本单位。每个数据帧由一个固定长度的头部和一个可变长度的负载组成。
4.1头部
Fin:表示是否为消息的最后一个帧。
Opcode:表示帧类型,如文本帧、二进制帧、关闭连接帧等。
Mask:表示负载数据是否被掩码,客户端发送的数据必须被掩码,服务器发送的数据则不需要。
PayloadLength:表示负载数据的长度。
4.2负载
MaskingKey:如果Mask位被设置,那么接下来的4个字节是掩码密钥。
PayloadData:实际传输的数据。
4.3示例
#创建一个WebSocket帧
importstruct
defcreate_frame(data,opcode=1,fin=1):
#将数据转换为字节
您可能关注的文档
- 移动开发工程师-网络通信与数据管理-SQLite数据库_SQLite数据库安全与权限管理.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_SQLite数据库简介与安装.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_SQLite数据类型与基本语法.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_SQLite索引与性能优化.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_SQLite与Python集成开发.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_创建与管理SQLite数据库.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_高级主题:触发器与事务处理.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_跨平台特性与移动应用集成.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_数据操作:INSERTUPDATEDELETE.docx
- 移动开发工程师-网络通信与数据管理-SQLite数据库_数据查询:SELECT语句详解.docx
- 2024年中国钽材市场调查研究报告.docx
- 2024年中国不锈钢清洗车市场调查研究报告.docx
- 2024年中国分类垃圾箱市场调查研究报告.docx
- 2024年中国水气电磁阀市场调查研究报告.docx
- 2024年中国绿藻片市场调查研究报告.docx
- 2010-2023历年初中毕业升学考试(青海西宁卷)数学(带解析).docx
- 2010-2023历年福建厦门高一下学期质量检测地理卷.docx
- 2010-2023历年初中数学单元提优测试卷公式法(带解析).docx
- 2010-2023历年初中毕业升学考试(山东德州卷)化学(带解析).docx
- 2010-2023历年初中毕业升学考试(四川省泸州卷)化学(带解析).docx
文档评论(0)