文档章节

Nutz-plugins-undertow配合WebSocket,模拟Room的方法

黄道坤
 黄道坤
发布于 2017/09/06 19:12
字数 463
阅读 21
收藏 0

使用WebSocket的时候,因为要推送消息,可能有多个客户端同时在线,一般的处理方法都是把这些Channel放进一个Room里,然后一起通知。 上一篇已经简单的说明基于Nutz的Undertow插件集成WebSocket的方法,这里跟进一步,看看如何模拟Room。

//添加WebSocket的Handler
PathHandler pathHandler = Handlers.path().addPrefixPath("/myWebsocket", websocket(new WebSocketConnectionCallback() {
    @Override
    public void onConnect(WebSocketHttpExchange exchange, WebSocketChannel channel) {
              channel.getReceiveSetter().set(new AbstractReceiveListener() {
              @Override
              protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) {
                //获取页面传递的message里的数据,这里封装了Nutz的一个Map工具,NutMap,里面包含了动作和房间名
                //获取连接的channel
                //channel有一个setAttrbute方法,可以放一个UUID进去,以保证唯一。我自己是用“房间名@UUID”,用处后面会讲
                //使用一个全局的Map,存进这个channel,并放进获取的房间名为Key的Map中
                //这样就能在发送的时候,遍历某个房间里的所有channel,然后sendText了
              }
             @Override
             protected void onClose(WebSocketChannel channel){
                //在关闭的时候,记得找到房间,并移除这个channel
                //这个时候就需要这个channel里的attribute里的id了,解析出房间名,就可以在这个房间名为Key的Map里移除channel了
               //有时候,一些特殊的需求,需要按照Channel来通信,就是说一个用户一个Channel。这里无法直接获取Session,我们可以使用一种变通的方法:
                //用户登录成功之后,在Session里保存一个UUID,然后页面初始化的时候,用这个UUID作为房间名,就是唯一的了。
                //到时候,只要能找到Session里的这个UUID,就可以单独给这个房间发送消息了
            }
          });
        channel.resumeReceives();
      }
})).addPrefixPath(contextPath, servletHandler);           

暂时用文字说明一下,有空了补充代码。

© 著作权归作者所有

共有 人打赏支持
黄道坤
粉丝 1
博文 5
码字总数 13828
作品 0
成都
程序员
私信 提问
NutzMore 1.r.62 发布,Nutz 官方插件集

更新内容: add: nutz-plugins-wkcache 方法缓存插件 by @Wizzer add: nutz-integration-bex5 集成插件 by @muyu add: nutz-plugins-undertow 插件 by @qinerg add: nutz-plugins-recur 插件......

wendal
2017/07/18
456
2
NutzBoot 2.0-RC 添加 undertow/模板引擎/ngrok 支持

NutzBoot 2.0-RC已发布。 首先,必须高亮一下@qinerg提交的starter-undertow,嗷嗷嗷. Jetty与Undertow任意切换^_^ 模板引擎(beetl和jetx)的starter已经完成,所以移除了starter-jetty的jsp依赖...

wendal
2017/12/01
626
17
undertow 接收到 websocket 链接时报404错误

客户端在往服务器 建立 websocket 链接时,返回404错误。 链接地址为 /websocket/{param} 形式的。这个连接失败不是必现的,大部分是链接成功的,只有一部分不成功,打开undertow的日志 看到...

火枫001
2018/08/16
172
0
NutzBoot v2.0 正式版发布

大家昨晚都很累吧,来瓶营养快线/红牛, 再战一X ^_^ 添加zookeeper集成,由天空提供 添加Vecloity模板引擎,由haoqoo提供 修正了几个bug ---------------------------------------------------...

wendal
2017/12/25
1K
18
WebSocket 开发模拟客户端与有游戏服务器通信

WebSocket 客户端测试功能   websocket是有标准的通信协议,在h2engine服务器引擎中继承了websocket通信协议,使用websocket通信协议的好处是很多语言或框架都内置了websocket的支持,工具...

知然
2017/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Jmeter参数的AES加密使用

在Jmeter日常实践中,大家应该都遇到过接口传参需要加密的情况。以登陆为例,用户名和密码一般都需要进行加密传输,在服务端再进行解密,这样安全系数会更高,但在使用jmeter进行接口测试的时...

程序猿拿Q
20分钟前
1
0
MYSQL 日期函数 Date and Time Functions

Table 12.13 Date and Time Functions Name Description ADDDATE() Add time values (intervals) to a date value ADDTIME() Add time CONVERT_TZ() Convert from one time zone to another ......

_liucui_
27分钟前
1
0
Android代码混淆ProGuard工作原理简介

ProGuard能够对Java类中的代码进行压缩(Shrink),优化(Optimize),混淆(Obfuscate),预检(Preveirfy)。    1. 压缩(Shrink): 在压缩处理这一步中,用于检测和删除没有使用的类,字段...

SuShine
29分钟前
1
0
Idea 2018激活

教程地址: https://www.52pojie.cn/thread-781394-1-1.html 亲测可用

一个不正经的程序员
35分钟前
1
0
Android组件化开发实践和案例分享

目录介绍 1.为什么要组件化 1.1 为什么要组件化 1.2 现阶段遇到的问题 2.组件化的概念 2.1 什么是组件化 2.2 区分模块化与组件化 2.3 组件化优势好处 2.4 区分组件化和插件化 2.5 applicatio...

潇湘剑雨
35分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部