- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE1
PAGE1
WebSocket通信基础
1WebSocket协议简介
WebSocket协议是一种在单个TCP连接上进行全双工通信的协议。它被设计用于替代HTTP的长轮询技术,以实现更高效、低延迟的实时数据传输。WebSocket在客户端和服务器之间建立了一个持久的连接,允许数据在任意方向上进行传输,而不需要每次传输都建立新的连接。
1.1特点
全双工通信:客户端和服务器可以同时发送和接收数据。
低延迟:由于连接是持久的,所以通信延迟较低。
状态保持:WebSocket连接可以保持状态,使得实时应用更加高效。
二进制数据传输:除了文本数据,WebSocket还支持二进制数据传输,适用于音视频流等场景。
2WebSocket与HTTP的区别
2.1连接方式
HTTP:基于请求-响应模型,每次通信都需要建立新的连接,通信结束后连接关闭。
WebSocket:建立一次连接后,可以进行多次数据交换,连接保持开放状态。
2.2数据传输
HTTP:数据传输是单向的,由客户端发起请求,服务器响应。
WebSocket:数据传输是双向的,客户端和服务器都可以主动发送数据。
2.3协议头
HTTP:每次请求和响应都有完整的HTTP头,包括状态码、请求方法等。
WebSocket:连接建立后,数据包头更轻,只包含数据长度和类型等信息。
3WebSocket通信流程解析
WebSocket通信流程主要分为三个阶段:连接建立、数据传输和连接关闭。
3.1连接建立
连接建立阶段,客户端通过发送一个特殊的HTTP请求(Upgrade请求)到服务器,请求将连接升级为WebSocket协议。服务器响应这个请求,如果同意升级,则返回一个200OK的HTTP响应,并在响应头中包含Upgrade:websocket和Connection:Upgrade。
3.1.1客户端请求示例
importwebsocket
defon_open(ws):
print(###opened###)
ws.send(Hello,Server)
defon_message(ws,message):
print(Received:+message)
defon_error(ws,error):
print(error)
defon_close(ws):
print(###closed###)
ws=websocket.WebSocketApp(ws:///,
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever()
3.1.2服务器响应示例
importtornado.websocket
importtornado.ioloop
importtornado.web
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数据传输
一旦连接建立,客户端和服务器就可以通过WebSocket进行数据传输。数据可以是文本或二进制格式。
3.2.1发送文本数据示例
#客户端
ws.send(Hello,Server)
#服务器
self.write_message(uYousaid:+message)
3.2.2发送二进制数据示例
#客户端
ws.send_binary(b\x00\x01)
#
您可能关注的文档
- 移动开发工程师-网络通信与数据管理-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
- 两个相干源产生波具有3b chmc.pdf
- wifi高性能模块ce fcc rohs认证-xrf report电子档.pdf
- linux pci multiport installation manual多端口安装手册.pdf
- 二章基本概念理论.pdf
- 互联网工程任务组ietfs turnerrfc5940 txt.pdf
- mtz0数学高级证明集合关系群mathematics paper 3 sets relations and groups french.pdf
- 网上书店需求规格说明.pdf
- 系统测试用例pcweb终端.pdf
- apv1 keil环境下接口兼容问题.pdf
- 2023届江西省八所重点中学高三3月联考英语试题(原卷版).docx
文档评论(0)