d32*_*223 1 sockets android socket.io
我所拥有的: 我有带有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;
...
Run Code Online (Sandbox Code Playgroud)
我设法实现的是,在特定的服务器命令 ( msg = 2) 客户端连接到第二台服务器后,但客户端仍连接到第一台服务器(客户端仍在侦听来自第一台服务器的命令)。实际上,我认为客户端创建了第二个套接字,但没有正确关闭第一个套接字。
在这种情况下,客户端仍然从第一个服务器接收消息,但它会向新的第二个服务器发送响应。很奇怪,但这是我在这里设法做到的最远。
我试图断开客户端并启动新的侦听器是在客户端上调用:
socket.disconnect();socket.close();socket.off();然后创建新的套接字并连接它:
socket = IOSocket.getInstance(socketIP).getSocket();
socket.connect();
Run Code Online (Sandbox Code Playgroud)
所以我的问题一般是:
任何帮助或建议将不胜感激,所以提前致谢!
您应该在断开连接真正完成之前关闭套接字并关闭通道。
这应该是你的情况:
//create the initial socket
Socket socket = IO.socket("your_url");
//define a constant for your channel
public static final String ON_MESSAGE_RECEIVED = "msg";
//define the event listener
private Emitter.Listener onMessageReceived = new Emitter.Listener() {
@Override
public void call(Object... args) {
//your logic for the event here
}
});
//attach your channels to the socket
socket.on(ON_MESSAGE_RECEIVED, onMessageReceived);
socket.connect();
//when you want to disconnect the socket remember to shutdown all your channels
socket.disconnect();
socket.off(ON_MESSAGE_RECEIVED, onMessageReceived);
//Then create a new socket with a new url and register again for the same event
IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.reconnection = false;
socket = IO.socket("new_url", opts);
socket.on(ON_MESSAGE_RECEIVED, onMessageReceived);
socket.connect();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7582 次 |
| 最近记录: |