V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
linpf
V2EX  ›  问与答

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

  •  
  •   linpf · 2015-05-20 23:59:37 +08:00 · 3003 次点击
    这是一个创建于 3477 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我是想实现通过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轮训强吗?

    谢谢各位啦。

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

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

    追求实时性用长连接,不过需要你再点点技能点。。
    linpf
        10
    linpf  
    OP
       2015-05-21 12:13:31 +08:00
    @9hills 长连接?那不就是socket?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1376 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 23:48 · PVG 07:48 · LAX 15:48 · JFK 18:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.