- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第
golang微服务框架kratos实现Socket.IO服务的方法
目录Socket.IO如何工作客户端服务端Socket.IO的限制Kratos服务端参考资料(Reference)Socket.IO是一个面向实时web应用的实时通讯库。它使得服务器和客户端之间实时双向的通信成为可能。底层使用EngineIO。SocketIO的的客户端使用Engine.IO-Client,服务端使用Engine.IO实现。
Socket.IO主要使用WebSocket协议。但是如果需要的话,Socket.IO可以回退到几种其它方法,例如AdobeFlashSockets,JSONP拉取,或是传统的AJAX拉取,并且在同时提供完全相同的接口。尽管它可以被用作WebSocket的包装库,它还是提供了许多其它功能,比如广播至多个套接字,存储与不同客户有关的数据,和异步IO操作。
Socket.IO如何工作
客户端
EIOSocket通过一个XHR(XMLHttpRequest)握手。前端发送一个XHR,告诉服务端我要开始XHR长轮询了。后端返回的数据里面包括一个open标志(数字0表示),以及sid和upgrades字段,ping时间间隔,ping超时时间。
{
sid:8b7ab1ae-fbcf-4d23-8192-3c14a2a90721,
upgrades:[
websocket
pingInterval:10000,
pingTimeout:60000
}
sid是本次EIOSocket的会话ID,因为一次EIOSocket包含了多个请求,而后端又会同时连接多个EIOSocket,sid的作用就相当于SESSIONID。
另一个字段upgrades,正常情况下是[websocket],表示可以把连接方式从长轮询升级到WebSocket。
前端在发送第一个XHR的时候就开始了XHR长轮询,这个时候如果有收发数据的需求,是通过长轮询实现的。所谓长轮询,是指前端发送一个request,服务端会等到有数据需要返回时再response.前端收到response后马上发送下一次request。这样就可以实现双向通信。
前端收到握手的upgrades后,EIO会检测浏览器是否支持WebSocket,如果支持,就会启动一个WebSocket连接,然后通过这个WebSocket往服务器发一条内容为probe,类型为ping的数据。如果这时服务器返回了内容为probe,类型为pong的数据,前端就会把前面建立的HTTP长轮询停掉,后面只使用WebSocket通道进行收发数据
EIOSocket生命周期内,会间隔一段时间ping-pong一次,用来测试网络是否正常。
这是WebSocket帧的结构,绿色是发送,白色是接收。前面的数字是数据包类型,2是ping,3是pong,42是message
服务端
服务端使用ws库实现WebSocket协议。http://socket.io服务启动时,会先启动一个ws服务。http://socket.io会监听HTTP服务器的upgrade和request事件。当upgrade事件触发时,说明可能是WebSocket握手,先简单校验下,然后把请求交给ws服务进行处理,拿到WebSocket对象。当request事件触发时,根据url路径判断是不是http://socket.io的XHR请求,拿到res和res对象。这样就可以正确接收和返回客户端数据了,具体处理过程和前端部分是对应的。
Socket.IO的限制
与所有技术一样,选择正确的一种意味着明确您对产品未来的期望。与您自己创建Socket链接相比,SocketIO确实使许多事情变得更容易,但是除了上面提到的扩展问题之外,还有局限性和缺点。
首先是初始连接比WebSockets更长。这是因为它首先使用长轮询和XHRPolling建立连接,然后升级到WebSocket(如果可用)。如果您不需要支持较旧的浏览器并且不担心不支持WebSockets的客户端环境,则可能不需要SocketIO的额外开销。您可以通过指定仅与WebSockets连接来最大程度地减少这种影响。这将更改与WebSocket的初始连接,但是会关闭备选方案。
在代码最小化的情况下,客户端仍将需要下载61.2KB的数据。
您可能关注的文档
最近下载
- 广东省深圳市宝安区小升初数学试卷及答案.docx VIP
- 免拆混凝土底模钢筋桁架楼承板产品的出厂检验、选型表.pdf VIP
- 华师大版七年级上册有理数计算培优100题(无答案).doc VIP
- 2024年青海省生态环境监测专业技术人员大比武理论试题库资料(含答案).pdf VIP
- 2024年新闻、电视摄影及制作技能及理论知识考试题库(附含答案).docx VIP
- 2025年湖北省技能高考(计算机类)专业知识考试题库汇总-中(600题).docx
- 花篮式悬挑脚手架施工方案.docx VIP
- 结核病痰涂片及质量保证.ppt
- 人教版二年级数学上册第一单元认识长度单位-选用合适的长度单位PPT课件.pptx VIP
- 2024年广东省深圳市宝安区小升初语文试卷(含答案).doc VIP
文档评论(0)