【问题标题】:Java Socket redirectJava 套接字重定向
【发布时间】:2015-07-24 15:15:13
【问题描述】:
我遇到了以下问题:
我有一个在端口 x 上侦听的 ServerSocket,并希望将连接用户重定向到服务器 a 或服务器 b(取决于服务器负载)。
当我只使用一台服务器时(通过为目标服务器创建一个新的 Socket 并将服务器流发送给播放器),这一切都像一个魅力
但是当我尝试更改 Socket 地址和端口以将播放器重定向到另一台服务器时,我得到一个 Socket (close) 异常并且没有用户被重定向。
你有什么想法/关键词让我搜索吗?
重定向播放器非常重要,在端口 X 上连接到服务器 a 或服务器 b(或服务器 c ...等)而不中断连接
提前致谢!
最大
【问题讨论】:
标签:
java
sockets
networking
【解决方案1】:
我猜默认方法是在两台服务器前使用单独的负载平衡器。你考虑过这个选项吗?
最好的问候,迪多
【解决方案2】:
一旦 Socket 打开,端点就不能改变。
如果您想要透明的服务器选择,那么某种网络负载平衡是最合适的。
如果您可以控制通信协议,客户端可以向初始服务器请求服务器:端口对用于数据连接,然后重新连接到新会话。如果服务器指示当前连接是可以接受的,那么就继续。
这样,每个会话将继续,直到服务器提出替代端点。
【解决方案3】:
选项 1:为您的协议添加指定重定向的功能。换句话说,允许服务器在套接字上回复一条消息,指示客户端实际连接到的位置。第一个服务器的第一个套接字关闭,客户端通过打开重定向消息中指示的服务器的第二个套接字来响应重定向消息。
选项 2:代理与第二台服务器的连接。在这种情况下,客户端保持与第一台服务器的初始连接。第一台服务器打开与第二台服务器的连接。第一个服务器从客户端读取数据并将该数据写入第二个连接。同样,它从第二个连接读取数据并将该数据写入第一个连接。