A_93_推送技术,服务端push,实时化
2021-04-15 23:02:00 0 举报
AI智能生成
全面、高效的知识图谱:A_93_推送技术,服务端push,实时化!! 全面又深度的提升认知,达到实际应用的目的! 建议先纵观全局,掌握好大方向。 再根据自己的需要,针对性的学习某一个点,最后做到逐步由点及面。
作者其他创作
大纲/内容
开源框架选型
服务端实现
Node (Socket.IO, WebSocket-Node, ws)
java
Jetty Websocket API
tomcat websoket
netty/netty
Netty项目 - 事件驱动的异步网络应用程序框架http://netty.io/
koush/AndroidAsync
异步socket,http(客户端+服务器),websocket和socket.io库为android。 基于nio,而不是线程。
socketio/socket.io-client-java
用于Java的全功能Socket.IO客户端库,与Socket.IO v1.0及更高版本兼容。
mrniko/netty-socketio
在Java上实现的Socket.IO服务器。 实时java框架
eclipse/jetty.project
EclipseJetty® - Web容器和客户端 - 支持HTTP / 2,HTTP / 1.1,HTTP / 1.0,websocket,servlet等
Python (Tornado, pywebsocket)
参考
服务器 Push 技术
web服务器端推送技术简介 - 推酷
Web 实时推送技术的总结 - 推酷
PUSH 云服务和解决方案 - 推酷
web前端的实时化-上海 HTML5 峰会笔记整理与总结
Jack肖解读 Web 实时化(iWeb峰会 PPT内容) - 推酷
技术
实现方式
Comet
Comet 本意是彗星,彗星尾巴痕迹很像长连接工作方式,所以 Comet 指代长连接
Ajax 轮询(polling)
iframe / htmlfile
script tag (不中断的连续请求)
Flash 通讯
Server-sent-events(SSE)
Server-sent-events(SSE) 让服务端可以向客户端流式发送文本消息,在实现上,客户端浏览器中增加 EventSource 对象,使其能通过事件的方式接收到服务器推送的消息,在服务端,使用长连接的事件流协议,即请求响应时增加新数据流数据格式
SSE事件流以流式HTTP响应请求,客户端发起普通的 HTTP 请求,服务器以自定义的 text/event-stream 内容类型响应,然后通过事件传递数据
优点
基于现有http协议,实现简单
断开后自动重联,并可设置重联超时
派发任意事件
跨域并有相应的安全过滤
缺点
只能单向通信,服务器端向客户端推送事件
事件流协议只能传输UTF-8数据,不支持二进制流。
IE下目前所有不支持EventSource
风险
Tip 如果代理服务器或中间设备不支持SSE,会导致连接失效,正式环境中使用通过TLS协议发送SSE事件流。
WebSocket
使用场景
通信、股票、Feed、直播、共享桌面
客户端与服务频繁交互的情况下,如实时共享、多人协作等平台
优点
真正的全双工通信
支持跨域设置(Access-Control-Allow-Origin)
缺点
采用新的协议,后端需要单独实现
客户端并不是所有浏览器都支持
代理服务器会有不支持websocket的情况
无超时处理
更耗电及占用资源
风险
TIP 代理、很多现有的 HTTP 中间设备可能不理解新的 WebSocket 协议,而这可能导致各种问题,使用时需要注意,可以使借助 TLS ,通过建立一条端到端的加密信道,可以让 WebSocket 通信绕过所有中间代理。
MQTT
MQTT有C/C++语言和JAVA包实现。需要明确的是,MQTT更适用于设备终端和手机APP socket通信,而不能支持浏览器使用
如果要支持微信浏览器应用,还需要增加类似WebsocketServlet技术给浏览器提供支持,这时MQTT以JS接口进行封装,并被调用完成消息推送。
CoAP
CoAP是受限制的应用协议(ConstrainedApplication Protocol)的代名词。其基于UDP协议,也就是在设备终端上只需要底层实现UDP协议,而不需要实现较为复杂的TCP协议。这种协议用得比较小。笔者也没有用C语言模拟过,就不展开了
结构图
分支主题
0 条评论
下一页