2017-04-09 2 views
1

Ich entwickle gerade ein Spiel für Android. Dieses Spiel hat starke Vernetzung.Good android network practice

Ist es besser, zwei separate Threads zu haben, einen zum Empfangen von Nachrichten und den anderen zum Senden von Nachrichten. Oder ist es besser, einen einzigen Thread zum Senden und Empfangen von Nachrichten zu haben?

public static void init(String h){ 
    host=h; 
    connected=false; 
    instance = new Client(); 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      group = new NioEventLoopGroup(); 
      try{ 
       bootstrap = new Bootstrap() 
         .group(group) 
         .channel(NioSocketChannel.class) 
         .handler(instance); 

       channel = bootstrap.connect(host,PORT).sync().channel(); 
       connected=true; 

      } catch (Exception e) { 
       if (notifier!=null){ 
        notifier.onServerNoLongerReachable(); 
       } 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 

public static void setNotifier(ClientInterface notif){ 
    notifier = notif; 
} 

Ich bin mit Netty und ich habe eine benutzerdefinierte Schnittstelle, die meine Tätigkeit

public interface ClientInterface{ 
    void onReceive(String msg); 
    void onServerNoLongerReachable(); 
} 
+0

Ein Thread pro Nachricht wäre ideal , aber welche Probleme erleben Sie derzeit, um die Frage zu stellen? Und verwenden Sie 'RxJava', weil das bei den Netzwerkanforderungen helfen würde. –

+0

Ich habe derzeit keine Probleme, ich verifiziere nur, dass ich nicht falsch herum laufe. – logan20

+0

Können Sie einen Code als Beispiel angeben? –

Antwort

0

implementieren Faden ist keine gute Praxis für Android Dev. Verwendung AsyncTask ist besser: https://developer.android.com/guide/components/processes-and-threads.html

Oder wie Cricket_007 sollten Sie einen Blick auf RxJava nehmen: https://github.com/ReactiveX/RxAndroid

Für networkCall Sie Retrofit w/RxJava verwenden: http://square.github.io/retrofit/

+0

Dies beantwortet jedoch die Frage nicht wirklich, weil 1) AsyncTask die Socket/Channel-Kommunikation sorgfältig handhaben muss. 2) 'NioEventLoopGroup' in der Frage müsste ein Rx-Äquivalent haben, also würde es nicht helfen, auf die Dokumentation zu zeigen –

Verwandte Themen