这是否适合使用websocket编程?

时间:2013-09-26 13:58:14

标签: java ruby-on-rails sockets websocket

我对websockets的主题非常新,我正试图找出处理设备和服务器之间通信的正确方法。

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

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

我想过让恒温器每隔2-5秒对服务器进行长时间轮询以查看数据库中的“当前统计数据”是什么来改变温度,但这似乎有点过头了。

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

我开始阅读有关websockets的阅读之路,但是,我认为它仅仅是基于浏览器的。

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

技术规格

服务器是用Ruby on Rails编写的

恒温器用Java编写

2 个答案:

答案 0 :(得分:2)

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

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

我们在不久前将一些java原型化为java websockets。我们在客户端使用了ning async库,在服务器端使用了atmosphere库(在netty上构建)。

答案 1 :(得分:0)

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

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