首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

急Delphi数据转发服务器设计!待

2012-05-16 
急!求助,Delphi数据转发服务器设计!在线等待!这次的项目,是对已投入使用的程序做修改,Delphi的源码。原来的

急!求助,Delphi数据转发服务器设计!在线等待!
这次的项目,是对已投入使用的程序做修改,Delphi的源码。
原来的设计是这样的,外网,600-1000个GPRS客户端,连接到一个服务器A。
但现在客户要求能开多个服务器,也就是说,原来只与一个服务器通讯的客户端,可能要与多个服务器通讯。
通讯有两种:一种类似心跳,只要接收到,就发给全部的服务器,另外一种,是服务器发指令给某个客户端,某个客户端回应。

我目前的设计是,在中间加一个代理服务器,通过代理服务器的SocketServer链接外网客户端,SocketClient链接内网的服务器A、B、C……,至于要创建几个内网SocketClient通过取数据库中的在线服务器表来获得。在接收到心跳时SocketServer将数据交给每个SocketClient发送,在接收到服务器A的指令时,交给SocketServer发送。

现在有几点疑惑:
1、内网服务器A、B、……是不是只能从数据库中的在线服务器表来获得?这好像是最原始的办法。
2、服务器A发送出来的指令,是发给外网的哪个客户端,怎么识别?指令上没有标识,以前是直接连接,可以保持这个链接,现在有个中介的服务器隔着。

因为以前没有做过服务器这块,还是个菜鸟,呵呵。

不知道有没有更好的办法,希望各位大侠多多指点。

[解决办法]
我们系统是这样做的
有一个引导服务器,所有的用户会登这个引导。然后引导服务器会分配各自的用户连上不同的功能服务器
[解决办法]
通讯有两种:
1、类似心跳,只要接收到,就发给全部的服务器,
2、是服务器发指令给某个客户端,某个客户端回应。

2不用修改吧
1可以由收到的服务器在数据库里加一条记录,其它服务器从数据库里查到就行了
[解决办法]
不改客户端? 我想可以这样:
1。在在线服务器表里加一个字段,表时这台服务器已经连接的客户端数
2。客户端连接中间服务器时, 先判断 在线服务器表里的客户端连接数 ,自动选择在线数最少的服务器连接 
3。现在客户端都连上在线数最少的服务器端了 修改在线服务器表的客户端连接数
 这样做,中转服务器端负担会不会太大?所有数据都通过它转发

方法二 修改客户端 如上面所说 设个 引导服务器 由用户自已选择登录那台服务器
[解决办法]
设想 服务器 a, b, c
索引服务器 master
客户端 client

可以在 a, b, c 和 master 之间保持一种心跳的机制来获取此时在线的服务器列表

然后client登录master的时候, 由master分配一个IP给client来连接就可以了

不知表达是否清楚, 欢迎拍砖.
[解决办法]
首先,你做个代理服务器的做法是对的,由这个代理服务器来管理服务器A,B。。。列表,如果是在内网是好办的,TCP本身就有心跳检测机制,不需要通过数据库来解决,如果通过数据库的话,碰到网线断了之类的异常就不好处理了,网上也有很多,我自己就用INDYTCPSERVER来做的,在CONNECT时加入心跳检测,DISCONNECT时就去列表中删除对应的客户端,比通过数据库方式准确得多,至于你第2点担心,外面的客户端只需要连接代理服务器,跟原先没有区别,就是你代理服务器要做的工作可能就要多点了,要在与其他服务器通讯时记住数据是有外部的哪个连接送来的
[解决办法]
说实话,你的表达让我很头晕,好像你把服务器和客户端给搞反了
按我的理解来说吧
你可以加一个负载均衡的硬件设备来实现,这样对外,只有一个服务器,具体由哪个服务器来工作,是用负载均衡来分配的

热点排行