无SSL环境下Web应用实现实时更新推送的技术问题咨询
问题1:无SSL环境下XMPP能否实现实时更新
XMPP本身不强制依赖SSL/TLS加密,技术上完全可以在无HTTPS/SSL的环境下实现实时更新,适配你的部署场景需要注意以下几点:
- 浏览器端可以走XMPP over WebSocket方案,无SSL的
ws协议在普通HTTP页面下可以正常调用,不需要HTTPS环境支持。 - 你只需要在中央消息服务器部署XMPP服务端,分布式的客户侧应用直接通过
ws协议连接中央服务器的XMPP接口即可,不需要客户侧服务器配置SSL证书。 - 明文传输存在消息被窃听、篡改的风险,如果业务对消息安全性有要求,需要额外做应用层的加密处理。
问题2:其他适配无SSL环境的实时推送方案
- WebSocket裸连(ws协议):是当前场景下最轻量化的方案。直接在中央消息服务器部署WebSocket服务,前端HTTP页面直接通过
new WebSocket('ws://中央服务器地址/接口')建立长连接,中央服务器有消息时直接推送给对应客户端即可。PHP生态可以用Workerman、Swoole扩展实现WebSocket服务端,不需要依赖Apache,仅部署在中央服务器即可,客户侧不需要做任何额外配置。 - Server-Sent Events(SSE):HTTP原生的单向推送协议,完全兼容普通HTTP页面的无SSL环境,非常适合仅需要服务端向客户端单向推送消息的场景。SSE实现比WebSocket更简单,客户端用原生
EventSource接口即可调用,服务端仅需要保持HTTP长连接、按照标准格式推送数据即可,Apache+PHP环境也可以直接实现,不需要额外安装扩展。 - 优化长轮询:如果不想对现有架构做较大改动,可以把普通短轮询升级为长轮询:客户端发送请求到服务端后,服务端没有新消息时就挂起请求不返回,等到有新消息或者请求超时再返回响应,客户端收到返回后立刻发起下一次请求。相比普通轮询可以大幅降低无效请求量,资源消耗接近长连接方案,对无SSL环境完全兼容,实现成本最低。
内容的提问来源于stack exchange,提问作者Stack Underflow
相关产品推荐
相关产品推荐

