求一套简单稳定的 B/S 架构的设备监控管理系统解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
linpf
V2EX    问与答

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

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

    我是想实现通过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     Solana     4631 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 03:58 PVG 11:58 LAX 19:58 JFK 22:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86