转发服务器的设计

CAOKAI2010 2012-05-15 02:18:40
大家好,现在要设计一个数据转发服务器的通信机制,请大家帮忙看看!谢谢!
假设有四个用户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就不唯一了!

请问大家怎么解决啊!?谢谢!~
...全文
205 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyj73231 2012-09-03
  • 打赏
  • 举报
回复
楼主的想法也不错,这也是我这几天想的问题。
楼主为什么需要客户端发送信息到服务器,然后再将信息转发给目标客户端呢,在这里我想到个简单的理由,比如服务器需要对客户端之间的通信有个记录。就好像QQ这样,虽然其好友不在线,仍然可以发送信息,只要该好友上线了就能收到信息。这样,服务器就必需对客户端信息有个记录才可以实现。
对于楼主的想法,使用Dictionary,我也觉得这个想法不错,对于记录几千个客户端这个方法还可以,就要能像QQ那样用这个方法记录几千万个客户端,可能不太现实。现在我也想不出什么好方法可以让服务器可以根据条件而转发信息。这帖发了这么久,不知楼主有没有更好的方法?有的话同我说下,我也正在为这烦呢
CAOKAI2010 2012-05-17
  • 打赏
  • 举报
回复
看来上面的描述,觉得路由表好像很好,如果具体到C#编程应该怎么来做呢?

应该是使用哪些类来实现?麻烦给个提示哈?谢谢!~
只在此山中 2012-05-17
  • 打赏
  • 举报
回复
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条记录就行.
「已注销」 2012-05-16
  • 打赏
  • 举报
回复
你需要先制定通信协议,首先,那么多连接连上来后,怎么判断那个连接去连哪个?只能通过协议来实现。

另外,根据你的需求描述,你可以尝试建立代理服务器,或者通过路由来转发。
wenbin 2012-05-16
  • 打赏
  • 举报
回复
想个简单的方式
A与B连接,那么就可以有个Session,这个可以当做此连接的key
存放在表中,
value则是A,B的信息,


那么每次发送包时,就把Session发送过来,通过这个key来查找对应的连接,这样,想怎么转发都可以完成了
在建立连接时生成Session
Conmajia 2012-05-16
  • 打赏
  • 举报
回复
建路由表
longhejiang 2012-05-16
  • 打赏
  • 举报
回复
先要指定好协议,转发服务器在将新的协议发给下一个
CAOKAI2010 2012-05-16
  • 打赏
  • 举报
回复
我这只是一个假设有Dictionary1、Dictionary2。
先考虑如何实现功能!ls遇到这种问题怎么“设计”的?
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我看网上很多用的Dictionary类来解决的!我也仿照设计了一下
当我需要给A、B建立转发时,由于Dictionary只能通过KEY找VALUE,我又创建了两个Dictionary1和Dictionary2.

其中Dictionary1中是socketA+socketB, Dictionary2中是socketB+socketA.
[/Quote]

看不懂你这是什么意思。

一个服务器,它可能服务于几万、几十万可能的用户。什么Dictionary1、Dictionary2?这是什么“设计”呢?
CAOKAI2010 2012-05-15
  • 打赏
  • 举报
回复
2个内网的用户,如果要通信,要么就是NAT穿透,要么就是数据库转发嘛!
公司不准穿透,还不就只有转发了撒!~
Soloboy1020 2012-05-15
  • 打赏
  • 举报
回复
为啥一定要转发,直接发送不行?

说回转发,你的转发服务器会有ABCD这4个Socket的链接吧,定义一个命令结构,简单点就是 目标+内容, 服务器收到这个结构的包后解析一下把内容发给 目标 就可以了,只是一个思路,打概这个意思吧

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧