내가 무엇을 가지고 : 내가 socket.io 구현 안드로이드 응용 프로그램이 있습니다. 서버는 node.js에서 실행됩니다. 서버 IP는 앱에 하드 코딩되어 있습니다. 클라이언트는 서버와 성공적으로 통신하며 메시지를 보내고받습니다. 내 클라이언트에서 사용하고socket.io + 안드로이드 - 차단 소켓과 다시 연결 다른 URL을
IO.socket 버전 : 클라이언트가 결정받은 후, 내 문제는 내가 클라이언트가 연결된 서버의 IP를 변경해야 할 것입니다 : 내가 할 필요가있는 무엇 ('io.socket:socket.io-client:1.0.0')
메시지.
단순화 된 클라이언트 소켓의 동작은 더 적은 다음과 같습니다이다 : 특정 서버 명령 (msg = 2
) 클라이언트가 두 번째 서버에 연결하지만, 이후에 클라이언트에 연결된 상태로 유지
socket.on("msg", new Emitter.Listener() {
@Override
public void call(Object... args) {
try {
switch (msg){
case "1":
keepOnListeningFirstServer();
break;
case "2":
connectToAnotherServer();
break;
...
내가 달성하기 위해 관리하는 것을 첫 번째 서버 (클라이언트는 여전히 첫 번째 서버의 명령을 듣고 있습니다). 실제로 나는 클라이언트가 두 번째 소켓을 생성하지만 첫 번째 소켓을 제대로 닫지 않는다고 생각합니다.
이 경우 클라이언트는 첫 번째 서버로부터 메시지를 수신하지만 새 두 번째 서버로 응답을 보냅니다. 꽤 별난, 그러나 그것은 내가 여기에서 이럭저럭 얻을 수 있었던 가장 먼 것이었다.
socket.disconnect();
socket.close();
socket.off();
을하고 새로운 소켓을 생성하고 연결하기 : 나는 클라이언트를 분리하고 클라이언트에서 호출 된 새로운 리스너를 시작하는 시도 무엇
:
socket = IOSocket.getInstance(socketIP).getSocket();
socket.connect();
그래서 일반적으로 내 질문은 :
- 왜 클라이언트가이 새 서버에 대한 응답을 보내는 경우에도 새 서버 메시지에 대한 내 고객 시작 청취가 아니다?
- 어쩌면 소켓 수신기를 닫지 않고 스위치/업데이트 할 수있는 방법이 있습니까?
- 이 첫 번째 소켓을 닫거나 연결 해제/파괴하는 적절한 방법은 무엇입니까?
- 어쩌면 누군가가 듣고있는 io.socket 서버 IP를 변경하는 더 나은 방법을 내게 줄 수 있습니까? (이 응용 프로그램은 Android 기본입니다.)
어떤 도움이나 조언도 주시면 감사하겠습니다.
네 해봤 forceNew = TRUE; 옵션을 사용하지만 클라이언트는 여전히 첫 번째 서버에 연결되어 있습니다. 내 conf의 다른 점은 옵션 reconnect = true를 설정한다는 것입니다. 내 고객이 온라인 상태에서 다시 연결되도록해야합니다. 최신 버전으로 업데이트하려고하지 않았습니다. 곧 할 수 있습니다. – d324223
버전 1.0.0으로 업데이트했으며, 옵션 reconection = false로 시도했습니다. 하지만 여전히 운이 .. 클라이언트가 새 서버에 연결하지만 여전히 새 서버의 메시지를 청취하지 않습니다 – d324223
정적 메서드'socket = IO.socket ("http : // new_url");'을 사용 했습니까? 그리고 새로운 소켓에 연결하기 전에'socket.disconnect()'와'socket.off ("channel", EventEmitterAnonymousClass);를 호출 할 필요가있을 것이다. – MatPag