文档章节

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
成都
程序员
undertow 接收到 websocket 链接时报404错误

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

火枫001
08/16
0
0
WebSocket 开发模拟客户端与有游戏服务器通信

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

知然
2017/09/29
0
0
用jetty搭建websocket服务并与ie78兼容的方法

jetty8中已经自带有websocket功能,所以我们可以很方便搭建一个自己的websocket服务。 源程序:http://sdrv.ms/N5BuKw 启动类:org.noahx.websocket.WebSocketServer 访问地址:http://127....

NoahX
2012/08/09
0
6
android内置浏览器不支持websocket的解决方法

为了实现移动客户端实时通信,拟采用安卓webview内嵌html实现方式开发app,通信则采用最新的html5新特性websocket实现。经测试,android4.0以下内置浏览器都不支持websocket特性。经过googl...

chape
2014/03/01
0
2
python 爬取fcoin比特币交易市场 上文

爬取环境 win10 python3 scrapy 爬取思路 首先你得先了解以下 http(https)请求(百科) websocket通信协议 python 模拟websoket客户端 (一)websocket简要介绍 WebSocket是一种在单个TCP...

徐代龙
08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

python中cv2模块imread函数

导入 >> import cv2>> import numpy as np 读图片 >> image_arr = cv2.imread('file_path') 灰度图扩展成彩色图 可以通过图片的channel判断是否是灰度图。如果需要可以将灰度图扩展到RGB......

温子寒
16分钟前
0
0
利用剪切板JS API优化输入框的粘贴体验

直接复制记录下 /**@description 表单输入框粘贴体验优化,出处https://www.zhangxinxu.com/wordpress/?p=8003@author zhangxinxu*/// 遍历所有的输入框[].slice.call(document.qu...

红羊在厦门
24分钟前
0
0
2018CTF大赛学习

1.C伪随机数,可预测,可用来做加密解密,如 int main() { // This program will create same sequence of // random numbers on every program run for(int i = 0; ......

simpower
38分钟前
0
0
XamarinEssentials教程移除键值首选项的键值

XamarinEssentials教程移除键值首选项的键值 如果开发者不再使用首选项中的某一项时,可以将该项移除掉。此时可以使用Preferences类的Remove()方法,该方法可以将存在于首选项中的指定键以及...

大学霸
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部