基于netty的websocket协议实现
背景
项目中使用到了websocket,所以查阅相关资料,完成了一个基于netty的websocket的实现,这里写一下说明,相关代码在GitHub,代码很简单,可以参考一下,或者自己实现,代码来自《Netty权威指南 第2版》,
以下是我的具体代码GitHub地址:https://github.com/shenxiangwei/netty-websocket-starter
1.启动服务端
启动spring boot服务端以后,看到如下日志说明服务端启动成功。
2.测试服务端和客户端效果
打开在线websocket测试,我用的是
http://coolaf.com/tool/chattest/
输入本机的websocket ip和端口(ws://localhost:8091),点击连接如下,
然后可以在下面,输入要发给服务端的消息,
服务端收到消息,打印到了控制台,如下:
服务端如果想发送消息给客户端,可以调用工具类,我使用当前项目的controller来做示例,代码如下
@Controller
public class TestController {
/**
* 获取所有客户端频道id
* 每个客户端对应一个频道,频道id可等同于客户端id
*
* @return 客户端频道id
*/
@RequestMapping(value = "/getActiveChannel")
@ResponseBody
public List<String> getActiveChannel(){
return Message.getAllChannelId();
}
/**
* 向指定客户端发送消息
*
* @param channelId 频道id
* @param msg 消息内容
*/
@RequestMapping(value = "/sendMessageToClient")
@ResponseBody
public void sendMessageToClient(String channelId,String msg){
Message.send(msg,channelId);
}
/**
* 向所有客户端发送消息
*
* @param msg 消息内容
*/
@RequestMapping(value = "/sendMessageToAll")
@ResponseBody
public void sendMessageToAll(String msg){
Message.sendToAll(msg);
}
}
调用该接口,可发送消息到客户端
首先获取客户端id
然后调用接口,输入id和消息内容,发送消息
客户端收到服务端消息
结束。
[1]: 李林锋.netty权威指南 第2版[M].电子工业出版社:北京,2015:209.