私が持っているもの: 私は socket.io実装してAndroidアプリケーションを持っています。サーバーはnode.jsで動作します。サーバーIPは、アプリケーションにハードコードされています。クライアントはサーバーと正常に通信します。メッセージは送受信されます。 ('io.socket:socket.io-client:1.0.0')
socket.io +アンドロイド - 切断ソケットと再接続し、別のURLで
私が取得する必要が何を:私は私のクライアントで使用しています
IO.socketバージョン私の問題は、クライアントが決定受け取った後、私は、クライアントが接続しているサーバーの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
)クライアントが第二のサーバに接続しますが、クライアントがに接続されたままということです最初のサーバー(クライアントはまだ最初のサーバーからコマンドを聞いています)。実際には、クライアントが2番目のソケットを作成しますが、1番目のソケットを正しく閉じることはできません。
この場合、クライアントは最初のサーバーからメッセージを受信しますが、新しい2番目のサーバーに応答を送信します。かなり変わったけど、それは私がここでこれで得ることができた最も遠いものだった。
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