请教关于socket多个服务器的问题 10

基于c#socket有多个服务器,有一个网关服务器来维持客户端长连接.就是说,客户端连接上后,根据不同的业务需要,网关服务器把工作提交到某台业务服务器,然后业务服务器把结... 基于c# socket有多个服务器,有一个网关服务器来维持客户端长连接. 就是说,客户端连接上后,根据不同的业务需要,网关服务器把工作提交到某台业务服务器,然后业务服务器把结果直接发送给对应客户端。

请问这个网关服务器怎么才能把这个客户端连接信息发送到对于的业务服务器?网关服务器把客户端的ip和端口发送给业务服务器就可以了吗?

谢谢!
展开
 我来答
然后去远足
2014-10-04 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2417万
展开全部
两个错误和一点建议。

● 错误1 是按照题主的在问题里所描述的设计,网关服务器根本没有维持长连接的必要,只需要转发消息给业务服务器后跟 Client 的连接就可以断开了,剩下的都是业务服务器跟 Client 直接通信了。不知题主还有什么关于维持长连接的必要没有在问题里说明?

● 错误2 是如果维持长连接了,把 Client 的端口号转发给业务服务器了有什么用?Client 的这个端口正在跟网关服务器通信呢,业务服务器怎么可能通过这个端口跟 Client 建立连接?难道同一个端口还能被多个 Socket 占用吗?

● 建议 要么改为业务服务器不跟 Client 通信,还是经由网关服务器中转进行;要么业务服务器就需要跟 Client 进行“打洞”(Hole Punching)。

先说为什么要“打洞”。对于处在同一子网下的计算机还好说,假如 Client 在子网 A 下,且 A 下有多态接入设备(最常见的就是走路由了),那么 A 子网下的所有计算对于你的服务器来说 IP 都是一样的,所以你要想要穿过路由直接跟 A 子网下的某台计算机建立连接,就必须要先“打洞”。

再推荐几篇有关 C# 打洞(Hole Punching)的资料:
http://www.csharpwin.com/csharpspace/2249.shtml
http://www.cnblogs.com/OpenCoder/diary/2011/06/29/2093895.html
http://www.csframework.com/archive/2/arc-2-20110612-1557.htm
http://blog.csdn.net/yoeoo/article/details/3195403
http://www.csharpwin.com/csharpspace/2248.shtml
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式