加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何使用Vert.x 3管理websocket上的连接用户?

发布时间:2020-12-15 00:35:16 所属栏目:Java 来源:网络整理
导读:为了说服一些人从旧学校技术转换,我需要构建一个聊天演示应用程序,使用 Java管理超过10K的并发连接(如Node.Js的东西). 我测试了Netty 5.0,这很棒,但需要做很多工作;另一方面,Jetty 9.3非常棒,但与其他竞争对手相比速度较慢. 经过一番搜索后,我找到了基于Nett
为了说服一些人从旧学校技术转换,我需要构建一个聊天演示应用程序,使用 Java管理超过10K的并发连接(如Node.Js的东西).

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

经过一番搜索后,我找到了基于Netty的Vert.x 3工具包,有很多很棒的工具(不需要重新发明轮子),我在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 3有什么东西可以处理连接以跟踪它们并删除那些离开(乒乓),广播等等,或者我应该从头开始使用cookie,session,….)

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

解决方法

基本上,websocketHandler的范围代表一种连接.在您的示例中,这是您的匿名类.我创建了一个小的websocket聊天 example,我使用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");
        });

    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读