2015-09-29 52 views
8

为了说服一些人从旧学校技术转换,我需要构建一个聊天演示应用程序,它使用Java(如Node.Js stuff)来管理超过10K个并发连接。如何使用Vert.x 3通过websocket管理连接的用户?

我测试过Netty 5.0这很棒,但需要做很多工作;另一方面码头 9.3是伟大的但比其他竞争对手相对缓慢。

一些搜索后,我发现了Vert.x 3工具包,这是基于Netty的与伟大的工具过多(无需推倒重来),我已经看到了混帐的例子,我能建立一个WebSocket的服务器等

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); 
} 

作为新来的Vert.x世界,我无法弄清楚如何使用它来管理连接的用户,通常旧的方式方法是使用这样的:

HashMap<UUID,ServerWebSocket> connectedUsers; 

当连接建立时,我检查它是否存在;如果没有,我把它添加为一个新的条目,并做一些功能发送,广播,检索通过收集等。

我的问题是不Vert.x 3有事要处理的连接来跟踪他们,并删除那些离开谁(乒乓球),广播等或者我应该使用Cookie,会话从头开始实现它们。 ...)

我找不到使用Vert.x 3.

+0

说服他们的是什么?您可以处理成千上万个连接,并将代码写入到20世纪80年代可用的API中。 – EJP

+0

我想使用异步方法并减少硬件你看到了吗? – merou

回答

0

基本上任何真实的例子,在websocketHandler的范围代表的连接。在你的例子中,这是你的匿名类。我创建了一个小websocket聊天example,我使用Vert.x事件总线将消息分发给所有客户端。

在服务器的启动方法中,我们处理websocket连接。您可以实施closeHandler来监视客户端断开连接。还有处理异常情况,乒乓等的处理程序。您可以使用textHandlerID标识特定的连接,但您也可以访问远程地址。

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); 
    } 

客户端示例也是用Java编写的。它只是将所有收到的消息打印到websocket连接到控制台。连接后它会发送一条消息。

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

当客户端失去连接(平面模式)时,服务器不会检测到它。 – mstafkmx

相关问题