负载均衡如何设置中转tcp服务器(手机app控制设备)
by_封爱 版主
2015-10-12 10:12:15 先说下背景.物联网开发手机APP(简称app)控制设备(简称device) 流程是这样的.
我写了一个tcpserver 监听端口9999 device连接wifi之后tcp/ip长连接我的tcpserver:9999.并且发送一个唯一命令(mac)
app要控制这个device也是连接tcpserver:9999;发送一个不同于device命令的唯一命令.
所以目前tcpserver目前有2个在线的tcp/ip长连接 一来自app一来自device
这样三者之间形成一个"三角形"关系
app发送到tcpserver,tcpserver解析下找到要控制的device这个tcp/ip的实例(tcpclient)就可以实现控制
并且device发送数据到tcpserver我还可以通过"关系"找到这个app并且把数据发送过去.
完成一次查询或者控制
--------------------------------------------分割线-------------------------------------------------------
上面的东西我已经完成并且很稳定也已经应用到了很多"智能家居"的项目中
但是现在有这样一个问题..也就是客户端非常多...
因为在一个服务器的一个tcplistener(忘记怎么写了)毕竟维持不了那么多(大概几万?????不确定)
所以采用了"负载均衡"来做.
在"负载均衡"(简称SLB)的可视化页面我设置了TCP端口9998映射了服务器A的9999端口 服务器B的9999端口
AB服务器都有监听程序.
这样设备连接SLB的时候 不一定会分配到A或者B.但是能正常连接..
那么现在问题来了...这个时候APP也来连接SLB的9998 同样也随机分配A或者B
这个时候如果分配的服务器跟device连接的服务器在一台服务器上 上面代码是可以的.
如果一个A一个B 那么A在发送控制命令的时候 在A的"内存"中找那个device的长连接是不存在的...
因为这个时候device连接的是B服务器..
所以这个时候我该如何下手? 也就是 我要保证app的连接跟device的连接能"对应"上.
或者用一个什么办法能让不同服务器的"内存"数据共享?(数据库不行啦毕竟我这是list<socket>,我随时都用的)
或者大家有没有做过类似负载均衡的智能家居解决方案?