如何使用Vert通过websocket管理连接的用户.x 3



为了说服一些人从旧学校的技术转换,我需要构建一个聊天演示应用程序,使用Java(像Node.Js的东西)管理超过10K的并发连接。

我已经测试了Netty 5.0,这是很棒的,但需要做很多工作;另一方面,Jetty 9.3很棒,但与其他竞争对手相比速度很慢。

经过一番搜索,我找到了Vert。x 3工具包,它是基于Netty的大量伟大的工具(不需要重新发明轮子),我在git中看到的例子,我能够构建一个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我有一些东西来处理连接来跟踪它们并删除那些离开的(乒乓),广播等,或者我应该从头开始实现它们使用cookie, session, ....)

我找不到任何使用Vert的真实示例。x 3 .

基本上,websocketHandler的作用域表示一个连接。在您的示例中,这是您的匿名类。我创建了一个小websocket聊天的例子,我使用Vert。X事件总线将消息分发到所有客户端。

在服务器的start方法中,我们处理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");
        });
    }

相关内容

  • 没有找到相关文章

最新更新