【发布时间】:2018-04-24 05:51:42
【问题描述】:
我有什么: 我有带有 socket.io 实现的 Android 应用程序。服务器在 node.js 上运行。服务器 IP 在应用程序中是硬编码的。客户端与服务器成功通信 - 它们发送和接收消息。
我在客户端使用的 IO.socket 版本:('io.socket:socket.io-client:1.0.0')
我需要得到什么: 我的问题是,在客户端收到确定的消息后,我必须更改客户端连接的服务器 IP。
简化的客户端套接字行为更像这样:
socket.on("msg", new Emitter.Listener() {
@Override
public void call(Object... args) {
try {
switch (msg){
case "1":
keepOnListeningFirstServer();
break;
case "2":
connectToAnotherServer();
break;
...
我设法实现的是,在特定服务器命令 (msg = 2) 之后,客户端连接到第二台服务器,但客户端仍然连接到第一台服务器(客户端仍在侦听来自第一台服务器的命令)。实际上我认为会发生什么是客户端创建了第二个套接字,但没有正确关闭第一个套接字。
在这种情况下,客户端仍然从第一个服务器接收消息,但它会将响应发送到新的第二个服务器。很奇怪,但这是我在这里能做到的最远距离。
我试图断开客户端并启动新的侦听器是在客户端上调用:
socket.disconnect();socket.close();socket.off();
然后创建新的套接字并连接它:
socket = IOSocket.getInstance(socketIP).getSocket();
socket.connect();
所以我的一般问题是:
- 为什么我的客户端没有开始监听新的服务器消息,即使这个客户端正在向这个新服务器发送响应?
- 也许有一种方法可以在不关闭套接字侦听器的情况下切换/更新它?
- 关闭/断开/销毁第一个套接字的正确方法是什么?
- 也许有人能给我一个更好的方法来改变客户端正在监听的io.socket服务器IP? (请注意,此应用是 Android 原生的)
任何帮助或建议将不胜感激,因此提前致谢!
【问题讨论】: