这次的项目,是对已投入使用的程序做修改,Delphi的源码。
原来的设计是这样的,外网,600-1000个GPRS客户端,连接到一个服务器A。
但现在客户要求能开多个服务器,也就是说,原来只与一个服务器通讯的客户端,可能要与多个服务器通讯。
通讯有两种:一种类似心跳,只要接收到,就发给全部的服务器,另外一种,是服务器发指令给某个客户端,某个客户端回应。我目前的设计是,在中间加一个代理服务器,通过代理服务器的SocketServer链接外网客户端,SocketClient链接内网的服务器A、B、C……,至于要创建几个内网SocketClient通过取数据库中的在线服务器表来获得。在接收到心跳时SocketServer将数据交给每个SocketClient发送,在接收到服务器A的指令时,交给SocketServer发送。现在有几点疑惑:
1、内网服务器A、B、……是不是只能从数据库中的在线服务器表来获得?这好像是最原始的办法。
2、服务器A发送出来的指令,是发给外网的哪个客户端,怎么识别?指令上没有标识,以前是直接连接,可以保持这个链接,现在有个中介的服务器隔着。因为以前没有做过服务器这块,还是个菜鸟,呵呵。不知道有没有更好的办法,希望各位大侠多多指点。
原来的设计是这样的,外网,600-1000个GPRS客户端,连接到一个服务器A。
但现在客户要求能开多个服务器,也就是说,原来只与一个服务器通讯的客户端,可能要与多个服务器通讯。
通讯有两种:一种类似心跳,只要接收到,就发给全部的服务器,另外一种,是服务器发指令给某个客户端,某个客户端回应。我目前的设计是,在中间加一个代理服务器,通过代理服务器的SocketServer链接外网客户端,SocketClient链接内网的服务器A、B、C……,至于要创建几个内网SocketClient通过取数据库中的在线服务器表来获得。在接收到心跳时SocketServer将数据交给每个SocketClient发送,在接收到服务器A的指令时,交给SocketServer发送。现在有几点疑惑:
1、内网服务器A、B、……是不是只能从数据库中的在线服务器表来获得?这好像是最原始的办法。
2、服务器A发送出来的指令,是发给外网的哪个客户端,怎么识别?指令上没有标识,以前是直接连接,可以保持这个链接,现在有个中介的服务器隔着。因为以前没有做过服务器这块,还是个菜鸟,呵呵。不知道有没有更好的办法,希望各位大侠多多指点。
服务器数量目前来说确实是不固定的。
所以我原先考虑的是,把服务端的代码改成客户端,然后像外网的Client一样链接新建的服务器(中介),
这样可以动态创建链接,而跟客户端的通讯,就像聊天室一样。但这样做感觉工作量蛮大,时间上可能来不及,所以暂时没考虑。
采取了另外一种方案,把中介服务器作为内网服务器的客户端来处理。
索引服务器 master
客户端 client可以在 a, b, c 和 master 之间保持一种心跳的机制来获取此时在线的服务器列表然后client登录master的时候, 由master分配一个IP给client来连接就可以了不知表达是否清楚, 欢迎拍砖.