我对websockets这个话题非常陌生,并且正在尝试找出处理设备和服务器之间通信的正确方法。
这是我的场景:我有一个恒温器(与 Nest 非常相似(,需要与 Web 服务器通信。每次您更改恒温器的温度时,我都需要将数据发送到Web服务器以更新数据库中的"当前统计信息"。很简单,我可以做到。
我感到困惑的部分,并认为websockets可能是一个用例,当用户从Web界面更改温度时。恒温器必须从服务器中提取这些信息才能看到"哦,好吧,你想要它是66度。
我想过让恒温器每 2-5 秒对服务器进行一次长轮询,以查看数据库中的"当前统计数据"以更改温度,但这似乎有点矫枉过正。
有没有办法在恒温器和服务器之间打开连接以侦听消息?
我开始阅读有关websockets的道路,但是,不幸的是,我相信它仅基于浏览器。
由于我在这些类型的连接方面对游戏相当陌生,如果有人能指出我在协议、通信等方面的正确方向。我将不胜感激!
技术规格
服务器是用Ruby on Rails编写的
恒温器是用Java编写的
Websockets可以在任何需要通信的两个程序之间使用,它们当然不限于浏览器。 也就是说,你应该使用websockets是一个不同的问题。 需要考虑的一件事是WebSockets涉及持久连接。 这可能无法扩展(如果您有很多设备(,也可能是矫枉过正。 如果您希望每天更改一次温度,那么全天保持连接是巨大的资源浪费。 Websocket 通常用于需要"快速"且相对频繁的通信。 除非您真的需要恒温器的即时更新,否则我会每隔几分钟就 ping 一次服务器进行更新。
旁注,websockets 是相当新的,所以你最终使用的任何库可能有点不成熟。
不久前,我们制作了一些java到java websockets的原型。 我们在客户端使用了 ning 异步库,在服务器端使用了 atmosphere 库(基于 netty 构建(。
WebSockets只是通过HTTP建立类似于TCP套接字的隧道的规范;它不仅限于浏览器,客户端库可用于大多数常见语言。
这听起来像是长时间运行的连接的合理用例,但我通常更喜欢原始TCP连接而不是WebSockets连接,除非您有特定的限制(例如,大多数家庭互联网连接在任意端口连接到服务器时没有问题(。