我在许多分布式嵌入式设备上有一个(Java-)应用程序与我的服务器通信。通信由HTTP请求组成,从任何一方开始,目前通过构建openVPN隧道来保护。这很有效,并具有以下必需功能:
- 安全(窃听,注入,身份验证等)
- 双向 - 双方中的任何一方都可以发起请求
- 可以很好地处理防火墙和NAT路由器(因为连接是从家里开始的)
- 自行重新连接隧道丢失
不幸的是,它还有以下缺点:
- (预期)1000台设备的服务器负载非常重
- 一些数据开销和连续发送 - 这在带宽和带宽上尤其是一个问题。数据量有限的设备
我正在考虑将安全的WebSockets(WSS)作为替代品,并希望了解这是否是一个好主意。到目前为止,我有以下问题:
- 我是否正确地假设在没有通信的情况下WebSockets的服务器负载是最小的?因此,这项技术可以扩展到在一台服务器上连续连接的几个10'000个客户端(流量很小)?
- 我是否正确地假设没有通信的数据开销很小? (保持活着是2字节,我读了)
- WebSockets未定义协议。我必须定义自己的请求/响应协议吗?或者我应该通过WebSocket隧道传输当前的HTTP请求?推荐什么?
- 我必须自己实施重新连接策略(onError,onClose - >立即重试,如果不成功请稍等一会再重试等)或者是否有标准?
- WebSockets如何通过通常的家庭防火墙,NAT路由器,代理等?它通常比VPN(使用非标准的传出端口,可能被阻止)更好吗?
- 由于应用程序不是浏览器,我是否必须包含可信证书?或者,当我控制两端时,我可以运行自己的证书颁发机构吗?
- 通过WebSockets进行机器对机器通信需要注意的其他特殊缺陷?