socket代理转发问题

youzlm 2010-10-22 09:42:03
问题是这样:


192.168.0.11 上布暑 sock 服务器一(任务1)
192.168.0.12 上布暑 sock 服务器二(任务2)
192.168.0.13 上布暑 sock 服务器三(任务3)
192.168.0.14 上布暑 sock 服务器四(任务4)
192.168.0.15 上布暑 sock 服务器五(任务5)


192.168.0.10 上布暑 sock 服务器
(实现转发功能,根据包不同包转发到不同的任务上,但是任务处理完之后的数据,有时可能要转发给每个在线的client_sock)
请问如何来维护这个client_sock虚拟表,让所有的服务器都可以调用用户虚拟表。
...全文
263 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyster2008 2010-10-22
  • 打赏
  • 举报
回复
代理那台机器现在压力也应该很大吧,客户发过来的数据包都是通过它转发的,不知道实际运行时系统吞吐量是多大?

[Quote=引用 14 楼 youzlm 的回复:]

引用 13 楼 justkk 的回复:

你的客户端与代理服务器是长连接方式吧?
这样的话,服务器1/2/3/4/5是不是可以通过这个长连接返回数据,而无需自己创建与客户端的连接?
再进一步,服务器12345自己甚至都不需要虚拟表了..

是长连接。。如果是这样做的话。。代理那台压力非常大。
[/Quote]
youzlm 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 justkk 的回复:]

你的客户端与代理服务器是长连接方式吧?
这样的话,服务器1/2/3/4/5是不是可以通过这个长连接返回数据,而无需自己创建与客户端的连接?
再进一步,服务器12345自己甚至都不需要虚拟表了..
[/Quote]
是长连接。。如果是这样做的话。。代理那台压力非常大。
justkk 2010-10-22
  • 打赏
  • 举报
回复
你的客户端与代理服务器是长连接方式吧?
这样的话,服务器1/2/3/4/5是不是可以通过这个长连接返回数据,而无需自己创建与客户端的连接?
再进一步,服务器12345自己甚至都不需要虚拟表了..
youzlm 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 oyster2008 的回复:]

对的。不知道你希望是什么样子
引用 10 楼 youzlm 的回复:

引用 4 楼 oyster2008 的回复:

两种方案:
一、代理服务器维护这个表,任务服务器将要转发的数据包发给代理,让其代为转发,缺点是代理服务器可能比较繁忙,在数据包很多的时候
二、每一个任务服务器各自维护一份表格,代理服务器在接收到客户端上线事件时,通知各个任务服务器在自己的私有表中增加这个客户端,当……
[/Quote]
这样有一个问题,因为我的客服端是as写的。不能主动接收服务器的连接。
同时也要保持AS在线状态。
oyster2008 2010-10-22
  • 打赏
  • 举报
回复
对的。不知道你希望是什么样子
[Quote=引用 10 楼 youzlm 的回复:]

引用 4 楼 oyster2008 的回复:

两种方案:
一、代理服务器维护这个表,任务服务器将要转发的数据包发给代理,让其代为转发,缺点是代理服务器可能比较繁忙,在数据包很多的时候
二、每一个任务服务器各自维护一份表格,代理服务器在接收到客户端上线事件时,通知各个任务服务器在自己的私有表中增加这个客户端,当客户端下线时,通知各个任务服务器在自己的私有表中删除这个客户端。当任务服务器需……
[/Quote]
youzlm 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oyster2008 的回复:]

两种方案:
一、代理服务器维护这个表,任务服务器将要转发的数据包发给代理,让其代为转发,缺点是代理服务器可能比较繁忙,在数据包很多的时候
二、每一个任务服务器各自维护一份表格,代理服务器在接收到客户端上线事件时,通知各个任务服务器在自己的私有表中增加这个客户端,当客户端下线时,通知各个任务服务器在自己的私有表中删除这个客户端。当任务服务器需要转发数据时,直接按照自己私有的表转发就可以了

……
[/Quote]
第二个方案很好。
这个方案有一个技术问题请教一下。socket转发时,服务器是不是要跟私有表里面的成员建立连接才可以发送。
justkk 2010-10-22
  • 打赏
  • 举报
回复
呵呵 一会就发 现在用户现场支持
主席,混一个星星就很费劲了,你都4个星星了,仰慕..
steptodream 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 justkk 的回复:]

客户端只与转发服务器连接?
那转发服务器就可以通知sock服务器1/2/3/4/5了
客户端下线时也一样

就是4楼说的方案2
[/Quote]
升星星了 还不发帖散分!
justkk 2010-10-22
  • 打赏
  • 举报
回复
客户端只与转发服务器连接?
那转发服务器就可以通知sock服务器1/2/3/4/5了
客户端下线时也一样

就是4楼说的方案2
youzlm 2010-10-22
  • 打赏
  • 举报
回复
这里面所有的服务器都是socket服务端,没有讲清楚,,可能让你误 解了
youzlm 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 justkk 的回复:]

你说的虚拟表是什么?
client_soc是什么?
[/Quote]

客服端(socket)连接到转发服务器(socket代理),称为client_socket
把client_socket保存起来,多个客服端同时连接,保存起来,称为虚拟表。
oyster2008 2010-10-22
  • 打赏
  • 举报
回复
两种方案:
一、代理服务器维护这个表,任务服务器将要转发的数据包发给代理,让其代为转发,缺点是代理服务器可能比较繁忙,在数据包很多的时候
二、每一个任务服务器各自维护一份表格,代理服务器在接收到客户端上线事件时,通知各个任务服务器在自己的私有表中增加这个客户端,当客户端下线时,通知各个任务服务器在自己的私有表中删除这个客户端。当任务服务器需要转发数据时,直接按照自己私有的表转发就可以了
justkk 2010-10-22
  • 打赏
  • 举报
回复
你说的虚拟表是什么?
client_soc是什么?
youzlm 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 justkk 的回复:]

sock服务器1/2/3/4/5 在不同的机器上,如果让所有的服务器都知道,那只能通过网络通信的方式..
sock服务器做服务端,sock服务器1 2 3.. 来主动获取client_sock虚拟表
或者,sock服务器做客户端端,sock服务器1 2 3..上部署代理,被动接收client_sock虚拟表
[/Quote]

我在每个任务服务器都是布暑sock服务端,也是通过网络通信方式。
就是客服端连到代理理端时,进行转发时,这个client_soc保存在虚拟表上,不知道要如何管理比较好,让所有的soc服务端都可以方便读取到。以便发送
justkk 2010-10-22
  • 打赏
  • 举报
回复
sock服务器1/2/3/4/5 在不同的机器上,如果让所有的服务器都知道,那只能通过网络通信的方式..
sock服务器做服务端,sock服务器1 2 3.. 来主动获取client_sock虚拟表
或者,sock服务器做客户端端,sock服务器1 2 3..上部署代理,被动接收client_sock虚拟表
youzlm 2010-10-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 oyster2008 的回复:]

代理那台机器现在压力也应该很大吧,客户发过来的数据包都是通过它转发的,不知道实际运行时系统吞吐量是多大?

引用 14 楼 youzlm 的回复:

引用 13 楼 justkk 的回复:

你的客户端与代理服务器是长连接方式吧?
这样的话,服务器1/2/3/4/5是不是可以通过这个长连接返回数据,而无需自己创建与客户端的连接?
再进一步,服务器12345自己甚至都不需要虚拟表了……
[/Quote]

这个还没有试过。
要是客服端连接多了。。。可能性能不会好。所以在想想。看有没有其它的方法。

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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