2013-09-16 1 views
0

Я использую Kryo-net для отправки и получения сообщений. На стороне сервера я открываю новый поток и задает сервер, проблема в том, что поток заканчивается в конце кода, поэтому на запросы нет запросов.Kryo - Как поддерживать работу сервера и ждать запросов

import com.esotericsoftware.kryo.Kryo; 
import com.esotericsoftware.kryonet.Connection; 
import com.esotericsoftware.kryonet.Listener; 
import com.esotericsoftware.kryonet.Server; 

public class MessagingServer implements Runnable{ 
    private Server server; 

    public void stop(){ 
    this.server.stop(); 
    } 

    public MessagingServer(){ 
    this.server = new Server(); 
    } 

    @Override 
    public void run() { 
    try{ 
     if(server!=null){ stop(); }  

     this.server.start(); 
     this.server.bind(54555, 54777); 

     Kryo kryo = this.server.getKryo(); 
     kryo.register(NewRequiredJobRequest.class); 
     kryo.register(NewRequiredJobResponse.class); 

     server.addListener(new Listener() { 
     @Override 
     public void received (Connection connection, Object object) { 
      if (object instanceof HelloRequest) { 
       HelloRequest request = (HelloRequest)object; 
       System.out.println(request.text); 

       HelloResponse response = new HelloResponse(); 
       response.text = "Thanks!"; 
       connection.sendTCP(response); 
      } 
     } 
     }); 
    } catch (Exception e) { 
     System.out.println("kryo server exception")); 
    } 

    // once the code reach here the thread is ended.. 
    } 
} 

ответ

0

Я никогда не использовал крио, но я думаю, что это поможет.

import com.esotericsoftware.kryo.Kryo; 
    import com.esotericsoftware.kryonet.Connection; 
    import com.esotericsoftware.kryonet.Listener; 
    import com.esotericsoftware.kryonet.Server; 

    public class MessagingServer implements Runnable{ 
     private Server server; 

     public void stop(){ 
     this.server.stop(); 
     } 

     public MessagingServer(){ 
     this.server = new Server(); 
     } 

     @Override 
     public void run() { 
     try{ 
      if(server!=null){ stop(); }  

      this.server.start(); 
      this.server.bind(54555, 54777); 

      while(true) { 

      Kryo kryo = this.server.getKryo(); 
      kryo.register(NewRequiredJobRequest.class); 
      kryo.register(NewRequiredJobResponse.class); 

      server.addListener(new Listener() { 
      @Override 
      public void received (Connection connection, Object object) { 
       if (object instanceof HelloRequest) { 
        HelloRequest request = (HelloRequest)object; 
        System.out.println(request.text); 

        HelloResponse response = new HelloResponse(); 
        response.text = "Thanks!"; 
        connection.sendTCP(response); 
       } 
      } 
      }); 
     } 
     } catch (Exception e) { 
      System.out.println("kryo server exception")); 
     } 

     } 
    } 
+0

Это просто добавляет слушателей. – Nir

0

объект сервера, вероятно, имеет какой-то listen или accept метод, который должен работать в цикле.

+0

Если он будет работать в цикле, он пропустит точку отверстия слушателя. – Nir

0

KryoNet Client # start и Server # start запускает поток демона. Если у вас нет других не-демона в вашем приложении:

new Thread(client).start(); 
new Thread(server).start(); 
Смежные вопросы