转发服务器的设计
大家好,现在要设计一个数据转发服务器的通信机制,请大家帮忙看看!谢谢!
假设有四个用户A/B/C/D连接到服务器,服务器创建socketA,socketB,socketC,socketD分别与客户A/B/C/D建立通信链接.
现在想要A与B连,C与D连,如何处理呢!?
我看网上很多用的Dictionary类来解决的!我也仿照设计了一下
当我需要给A、B建立转发时,由于Dictionary只能通过KEY找VALUE,我又创建了两个Dictionary1和Dictionary2.
其中Dictionary1中是socketA+socketB, Dictionary2中是socketB+socketA.
这样好像可以,但是要建2个,麻烦!
而且如果要是A如果还有信息发给D,那么Dictionary1中就会有socketA+socketB,socketA+socketD.
通过key找到的value就不唯一了!
请问大家怎么解决啊!?谢谢!~
------解决方案--------------------建路由表
------解决方案--------------------想个简单的方式
A与B连接,那么就可以有个Session,这个可以当做此连接的key
存放在表中,
value则是A,B的信息,
那么每次发送包时,就把Session发送过来,通过这个key来查找对应的连接,这样,想怎么转发都可以完成了
在建立连接时生成Session
------解决方案--------------------你需要先制定通信协议,首先,那么多连接连上来后,怎么判断那个连接去连哪个?只能通过协议来实现。
另外,根据你的需求描述,你可以尝试建立代理服务器,或者通过路由来转发。
------解决方案--------------------先要指定好协议,转发服务器在将新的协议发给下一个
------解决方案--------------------
LZ可以用简单点的方法,就是建一个类似路由的表.
例:建内存表或数据库表,只有2个字段in out,同时 socketA B C D 用session或通道号 1 2 3 4表示,这样你只要维护表中每个通道号唯一就行,也可以规定A只转发1个,不会同时转发B和D,如下
in out
1 2
2 1
3 4
4 3
如果1-2的转发不需要了,断开1-2,新建1-4,这样先清除原来1,2(可以用0表示断开转发)
in out
1 4
2 0
3 0
4 1
这样4个的连接转发关系就清楚了,同时有1000个socket就1000条记录就行.