2013-03-28 96 views
0

我已经实现了一个家庭监测和控制系统,包含一些运动探测器和温度传感器,它们连接到一台迷你PC作为服务器。在这台PC上,我有一个.NET ASMX Web服务,它有一些方法,返回检测器的状态和环境温度。事件驱动的网络服务

为了实现设备的情况,我试图建立一个Android应用程序,可以通过Wifi连接到网络服务并显示温度。 当温度超过临界范围或运动检测器检测到运动时,此应用程序必须显示相关通知。

这里的问题是:每次我需要系统情况时,我都会查询web服务。但这样我必须每隔一秒查询Web服务,以了解温度是否超出临界范围,以及探测器是否检测到运动。 问题:有没有更好的解决方案来实现这一目标?或者有什么方法可以让Web服务在发生事件时通知客户?

请注意,我在我的android应用程序中使用KSOAP2库。

在此先感谢

回答

1

您需要考虑使用推送通知模式,而不是轮询服务器以检查新数据。

这里有几个选项。最简单也是最标准的方法是查看谷歌的推送通知系统,称为谷歌云消息传递(GCM)。请注意,这仅适用于拥有Google服务的设备(因此,如果您使用的是Kindle Fire,则可以' t使用它)

或者您可以考虑基于MQTT协议的更多定制版推送通知。您需要设置您自己的MQTT服务器,并且拥有与MQTT服务器交谈的android代码和服务器代码。

无论何时数据发生变化,您都会向订阅客户端发送推送通知,这样他们就不必一直检查数据。

+0

感谢您的信息 – Kaiser

+0

我找到了另一个解决方案,但我不确定,所以如果我错了,请纠正我。也许我可以使用套接字编程,而不是使用Web服务。通过监听双方的特定端口并定义自己的通信协议,我可以将消息从服​​务器发送到客户端,反之亦然。 – Kaiser

+0

是的,这是正确的,但这意味着您将有一个连接到服务器的连接,如果在后台运行,将会消耗电池电量。 –

0

推送服务,即http://developer.android.com/google/gcm/index.html 但有推动的一定的限制,我想每个第二个电话会杀了这个限制。也许只是每5秒或10秒发送一次请求?房间温度即使在这个速率下也不会改变:)

+0

这是有用的服务,但当互联网连接消失时会出现另一个问题。无论如何感谢您的回复。 – Kaiser

+0

这是使用GCM的优势。一旦互联网连接回来,它会尽快通知设备。 –