2

我对 websockets 主题非常陌生,并且正在尝试找出处理设备和服务器之间通信的正确方法。

这是我的场景:我有一个恒温器(与Nest非常相似),它需要与 Web 服务器通信。每次您更改恒温器上的温度时,我都需要将数据发送到 Web 服务器以更新它在数据库中的“当前统计信息”。简单,我能做到。

我感到困惑并认为 websockets 可能是一个用例的部分是当用户从 web 界面更改温度时。恒温器必须从服务器中提取该信息才能看到“哦,好吧,你希望它是 66 度”。

我曾想过让恒温器每 2-5 秒对服务器进行一次长轮询,以查看数据库中的“当前统计信息”是什么来改变温度,但这似乎有点矫枉过正。

有没有办法打开恒温器和服务器之间的连接以收听消息?

我开始阅读有关 websockets 的道路,但是,不幸的是,我相信它只是基于浏览器的。

由于我在这些类型的连接方面对游戏相当陌生,如果有人能指出我在协议、通信等方面的正确方向,我将不胜感激!

技术规格

服务器是用 Ruby on Rails 编写的

恒温器是用 Java 编写的

4

2 回答 2

3

Websockets 可以在任意两个需要通信的程序之间使用,当然不限于浏览器。也就是说,您是否应该使用 websockets 是一个不同的问题。要考虑的一件事是 websockets 涉及持久连接。这可能无法扩展(如果您有很多设备),也可能是矫枉过正。如果您期望温度每天更改一次,那么一整天的持久连接是对资源的巨大浪费。当通信需要“快速”且相对频繁时,通常使用 websocket。除非您真的需要恒温器中的即时更新,否则我只会让它每隔几分钟 ping 服务器以进行更新。

旁注,websockets 是相当新的,所以你最终使用的任何库都可能有点不成熟。

不久前,我们对一些 java 到 java websockets 进行了原型设计。我们在客户端使用了ning async库,在服务器端使用了大气库(基于 netty 构建)。

于 2013-09-26T14:27:06.280 回答
0

WebSockets 只是一种类似于通过 HTTP 的 TCP 套接字的隧道规范;它不仅限于浏览器,客户端库可用于大多数常用语言。

对于长时间运行的连接,这听起来是一个合理的用例,但我通常更喜欢原始 TCP 连接而不是 WebSockets 连接,除非您有特定的限制(例如,大多数家庭 Internet 连接在连接到服务器时都没有问题在任意端口)。

于 2013-09-26T14:07:48.640 回答