socket代理转发问题

时间:2021-02-02 13:37:18
问题是这样:


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虚拟表,让所有的服务器都可以调用用户虚拟表。

16 个解决方案

#1


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

#2


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


我在每个任务服务器都是布暑sock服务端,也是通过网络通信方式。
就是客服端连到代理理端时,进行转发时,这个client_soc保存在虚拟表上,不知道要如何管理比较好,让所有的soc服务端都可以方便读取到。以便发送

#3


你说的虚拟表是什么?
client_soc是什么?

#4


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

#5


引用 3 楼 justkk 的回复:
你说的虚拟表是什么?
client_soc是什么?


客服端(socket)连接到转发服务器(socket代理),称为client_socket
把client_socket保存起来,多个客服端同时连接,保存起来,称为虚拟表。

#6


这里面所有的服务器都是socket服务端,没有讲清楚,,可能让你误 解了

#7


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

就是4楼说的方案2

#8


引用 7 楼 justkk 的回复:
客户端只与转发服务器连接?
那转发服务器就可以通知sock服务器1/2/3/4/5了
客户端下线时也一样

就是4楼说的方案2

升星星了 还不发帖散分!

#9


呵呵 一会就发 现在用户现场支持
主席,混一个星星就很费劲了,你都4个星星了,仰慕..

#10


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

……

第二个方案很好。
这个方案有一个技术问题请教一下。socket转发时,服务器是不是要跟私有表里面的成员建立连接才可以发送。

#11


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

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

#12


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

引用 4 楼 oyster2008 的回复:

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

这样有一个问题,因为我的客服端是as写的。不能主动接收服务器的连接。
同时也要保持AS在线状态。

#13


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

#14


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

是长连接。。如果是这样做的话。。代理那台压力非常大。

#15


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

引用 14 楼 youzlm 的回复:
引用 13 楼 justkk 的回复:

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

是长连接。。如果是这样做的话。。代理那台压力非常大。

#16


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

引用 14 楼 youzlm 的回复:

引用 13 楼 justkk 的回复:

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


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

#1


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

#2


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


我在每个任务服务器都是布暑sock服务端,也是通过网络通信方式。
就是客服端连到代理理端时,进行转发时,这个client_soc保存在虚拟表上,不知道要如何管理比较好,让所有的soc服务端都可以方便读取到。以便发送

#3


你说的虚拟表是什么?
client_soc是什么?

#4


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

#5


引用 3 楼 justkk 的回复:
你说的虚拟表是什么?
client_soc是什么?


客服端(socket)连接到转发服务器(socket代理),称为client_socket
把client_socket保存起来,多个客服端同时连接,保存起来,称为虚拟表。

#6


这里面所有的服务器都是socket服务端,没有讲清楚,,可能让你误 解了

#7


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

就是4楼说的方案2

#8


引用 7 楼 justkk 的回复:
客户端只与转发服务器连接?
那转发服务器就可以通知sock服务器1/2/3/4/5了
客户端下线时也一样

就是4楼说的方案2

升星星了 还不发帖散分!

#9


呵呵 一会就发 现在用户现场支持
主席,混一个星星就很费劲了,你都4个星星了,仰慕..

#10


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

……

第二个方案很好。
这个方案有一个技术问题请教一下。socket转发时,服务器是不是要跟私有表里面的成员建立连接才可以发送。

#11


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

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

#12


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

引用 4 楼 oyster2008 的回复:

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

这样有一个问题,因为我的客服端是as写的。不能主动接收服务器的连接。
同时也要保持AS在线状态。

#13


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

#14


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

是长连接。。如果是这样做的话。。代理那台压力非常大。

#15


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

引用 14 楼 youzlm 的回复:
引用 13 楼 justkk 的回复:

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

是长连接。。如果是这样做的话。。代理那台压力非常大。

#16


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

引用 14 楼 youzlm 的回复:

引用 13 楼 justkk 的回复:

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


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