2015-09-29 12 views
8

Bazı kişileri eski okul tekniğinden değiştirmeye ikna etmek için, Java (Node.Js öğelerini gibi) kullanarak 10 K eşzamanlı bağlantıları yöneten bir sohbet demo uygulaması oluşturmam gerekiyor.Vert.x 3 kullanarak, bağlanan kullanıcıları web üzerinden nasıl yönetebilirsiniz?

Başarısız olan ancak çok fazla işin yapılmasını gerektiren Netty 5.0 test ettim; diğer yandan, Jetty 9.3 büyüktür, ancak diğer rakiplere göre daha yavaştır.

bazı aramadan sonra ben harika araçları bir bolluk (tekerleği yeniden icat etmeye gerek) ile Netty dayanmaktadır Vert.x 3 araç, Ben git örnekleri gördük buldum ve başardı Vert.x dünyasına yeni olmak, WebSocket sunucusu, vb

public void start() throws Exception { 
    vertx.createHttpServer().websocketHandler(new Handler<ServerWebSocket>() { 
     @Override 
     public void handle(ServerWebSocket e) { 
      // business stuff in the old style not yet lambda 
     } 
    }).listen(port); 
} 

inşa etmek, bunu kullanarak bağlı kullanıcıları yönetmek nasıl çözemedim, normalde eski moda yolu gibi bir şey kullanmaktır:

HashMap<UUID,ServerWebSocket> connectedUsers; 

Bağlantı kurulduğunda var olup olmadığını kontrol ediyorum; değilse, yeni bir giriş olarak ekleyebilirim ve toplama, vb. yoluyla göndermek, yayınlamak, almak için bazı işlevler yaparım.

Sorum şu soruları yanıtlıyor: Vert.x 3 Onları izlemek ve soldan (ping pong), yayın vb. Kaldırmak için bağlantılarla uğraşacak bir şey var ya da bunları cookie, session, kullanarak sıfırdan uygulamalıyım. ...)

Ben Vert.x Temelde 3.

+0

Onları neye ikna edin? 1980'lerde mevcut olan API'lara yazılan kodlarla on binlerce bağlantıyı kaldırabilirsiniz. – EJP

+0

Eşzamansız bir yaklaşım kullanmak ve gördüğünüz donanımı azaltmak istiyorum? – merou

cevap

0

kullanarak herhangi bir gerçek örnek bulamadık, websocketHandler kapsamı bağlantı temsil eder. Örneğinizde bu sizin anonim sınıfınız. Mesajları tüm istemcilere dağıtmak için Vert.x olay veriyolunu kullandığım example küçük bir websocket sohbeti oluşturdum.

Sunucunun başlangıç ​​yönteminde, web bağlantısı bağlantılarını gerçekleştiriyoruz. İstemci bağlantısının kesilmesini izlemek için closeHandler'ı uygulayabilirsiniz. İstisnalar, ping-pong, vb. Için de işleyiciler vardır. TextHandlerID'yi kullanarak belirli bir bağlantıyı tanımlayabilirsiniz, ancak uzak adrese de erişebilirsiniz.

public void start() throws Exception { 
     vertx.createHttpServer().websocketHandler(handler -> { 
      System.out.println("client connected: "+handler.textHandlerID()); 

      vertx.eventBus().consumer(CHAT_CHANNEL, message -> { 
       handler.writeTextMessage((String)message.body()); 
      }); 

      handler.textMessageHandler(message -> { 
       vertx.eventBus().publish(CHAT_CHANNEL,message); 
      }); 

      handler.closeHandler(message ->{ 
       System.out.println("client disconnected "+handler.textHandlerID()); 
      }); 

     }).listen(8080); 
    } 

İstemci örneği de Java'da yazılmıştır. Sadece alınan tüm mesajları konsoldaki websocket bağlantısına yazdırır. Bağlantıdan sonra bir mesaj gönderir.

public void start() throws Exception { 
     HttpClient client = vertx.createHttpClient(); 

     client.websocket(8080, "localhost", "", websocket -> { 
      websocket.handler(data -> System.out.println(data.toString("ISO-8859-1"))); 
      websocket.writeTextMessage(NAME+ ":hello from client"); 
     }); 

    } 
+0

İstemci bağlantıyı kaybederse (Düzlem modu), sunucu bunu algılamaz. – mstafkmx

İlgili konular