websocket nutz

nutz-plugins-websocket

简介(可用性:生产)

为websocket提供完整支持

使用WebSocket最低要求:

  • Tomcat 8 或 Jetty 9.2+
  • JDK7+

低于该版本的就别想搞websocket了

使用方法

服务器端入口类

@ServerEndpoint(value = "/websocket", configurator=NutWsConfigurator.class)
@IocBean
public class MyWebsocket extends AbstractWsEndpoint {
}

页面端js示例

假设是jsp页面, 其中的base是项目的Context Path, home是房间的名称

        var ws;
		var WS_URL = window.location.host + ${base} + "/websocket"
		if (location.protocol == 'http:') {
			ws = new WebSocket("ws://"+WS_URL);
		} else { // 如果页面是https,那么必须走wss协议
			ws = new WebSocket("wss://"+WS_URL);
		}
		ws.onmessage = function(event) {
		    var re = JSON.parse(event.data);
		    if (re.action == "notify") {
		    	// 弹个浏览器通知?
		    } else if (re.action == "layer") {
		    	// 弹个层?
		    	layer.alert(re.msg);
		    }
		};
		ws.onopen = function(event) {
		    // 加入home房间
			ws.send(JSON.stringify({room:'home',"action":"join"}));
		};

从页面发消息给服务器:

ws.send(JSON.stringify({room:'房间名称',"action":"join"}));

从服务器发消息给房间

通过ioc注入上述的MyWebsocket
@Inject
protected MyWebsocket myWebsocket;

public void sayhi(String room) {
    myWebsocket.each(room, new Each<Session>() {
    	public void invoke(int index, Session ele, int length) {
                myWebsocket.sendJson(ele.getId(), new NutMap("action", "layer").setv("msg", "hi"));
            }
    });
}

从服务器发消息给指定的WebSocket会话

这是高级用法, 需要自行建立wsid与业务数据的关联,然后才能得到wsid

通过ioc注入上述的MyWebsocket
@Inject
protected MyWebsocket myWebsocket;

public void sayhi(String wsid) {
    myWebsocket.sendJson(wsid, new NutMap("action", "layer").setv("msg", "hi"));
}

另外发送文本,二进制数据的异步或同步方法,请查阅AbstractWsEndpoint的javadoc

如何定制

定制 消息处理类

即WsHandler的实例,覆盖AbstractWsEndpoint的createHandler方法就可以了.

需要注意的是, WsHandler的实例,必须实现MessageHandler.Whole或MessageHandler.Partial接口,两个接口二选一.

定制房间存储

我们内置了两个房间存储实现, 基于内存的MemoryRoomProvider和基于redis的JedisRoomProvider

默认是MemoryRoomProvider,适合中小型应用,单机.

AbstractWsEndpoint有一个属性叫 roomProvider, 把它设置成需要的实例就可以了.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值