求一套简单稳定的 B/S 架构的设备监控管理系统解决方案

2015-05-20 23:59:37 +08:00
 linpf

我是想实现通过PHP来制作一个B/S架构的控制系统,可以实时监控设备的状态,并且可以给设备发送指令。

现在的情况是,网站A跟设备控制程序B(C来写)不在一台服务器上,所以需要两者之间进行通信。A需要获取B的最新参数及状态,A也需要向B发送操作指令。A我来写,B我的小伙伴来写。

我先说一下我初步构思方案:
第一种,使用HTTP轮询问。在A服务器上搭建MYSQL数据库,用来存储系统状态和指令队列。如果A需要向B发送指令,那么就存到数据库中,等待B的轮训到来,取走指令队列,同时送来最新的设备状态数据。 [问题在于:实时性不强,而且轮询的话我感觉更容易丢包。]

第二种,使用socket。在A服务器上搭建MYSQL数据库,用来存储系统状态。如果A需要向B发送指令,那么就直接发送给B,B每个一段时间送来最新的设备状态数据。 [问题在于:我没用过socket,需要现学,所以不太熟练。而且对于socket掉线或者各种意外的处理能力不足。]
请问,A与B如何进行通信有什么好的方案?

补充:
1、我只会做网站,用PHP+MYSQL。小伙伴只会硬件,还略懂C#,但是对软件(网站)开发一窍不通。
2、如果推荐的是HTTP轮询,那么请问A需要发送指令给B,有什么比较及时的方法。
3、如果推荐的是socket,那么请问A是不是需要cli模式下的socket服务器php程序保持永久运行?不会有什么不稳定问题吧?
4、希望可以得到比较完全的方案描述。
5、我是一个小白,现在想到的思路都很陈旧,希望可以得到让我眼前一亮的想法或者业内普遍使用的方案。

另外问一个小白问题:HTTP的轮询跟socket连接以后相互发送数据,本质区别有吗?socket稳定性会比HTTP轮训强吗?

谢谢各位啦。

3014 次点击
所在节点    问与答
10 条回复
9hills
2015-05-21 00:29:34 +08:00
通信链路优质的话,结合你的背景,用定时轮询的方式是最简单的。因为你只有一个client 直接心跳周期设为1s就好了。

其他办法很多,但是在你这个例子里我觉得没啥必要。
9hills
2015-05-21 00:31:46 +08:00
主要是你的小伙伴不会写你能连上的server ,所以只能你做server 了
linpf
2015-05-21 09:36:26 +08:00
@9hills B是有多个的
9hills
2015-05-21 09:39:16 +08:00
@linpf 多少个? 几千个用心跳都是可以的
linpf
2015-05-21 10:43:35 +08:00
@9hills 具体我也不清楚,但是估计能有十来个。 如果是用HTTP轮询的方式,应该不会有性能问题吧?
linpf
2015-05-21 11:04:29 +08:00
@9hills 刚才确定了,有几百台
9hills
2015-05-21 11:07:26 +08:00
@linpf 不会,500台,1s心跳。相当于 500QPS,这个轻松啊
linpf
2015-05-21 11:12:17 +08:00
@9hills http轮询吗?
9hills
2015-05-21 11:30:44 +08:00
@linpf 500 QPS用轮询真是没有一点压力。。不过你的队列不要用MYSQL,用redis做队列或者直接内存队列即可。

追求实时性用长连接,不过需要你再点点技能点。。
linpf
2015-05-21 12:13:31 +08:00
@9hills 长连接?那不就是socket?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/192586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX