webcat——基于netty的http和websocket框架
2023-09-11 14:18:03 时间
Webcat是一个基于netty的简单、高性能服务端框架,目前提供http和websocket两种协议的快速开发模式。webcat采用spring进行对象管理,因此工程需要依赖spring框架,Github地址。
下载源代码后,可以直接运行WebcatServerTest启动http和websocket服务,然后通过pytest文件夹中的两个python脚本对服务进行测试。
HTTP Server 使用
在spring的配置中,加上对webcat的package扫描:
<context:component-scan base-package="com.lchml.webcat"/>
设置端口并启动:
public static void main(String[] args) throws WebcatStartException {
HttpServer httpServer = context.getBean(WebcatHttpServer.class);
httpServer.setPort(8080);
httpServer.start();
}
添加自己的controller:
<context:component-scan base-package="com.lchml.test"/>
@HttpController(path = "/test")
public class TestController {
@HttpRequestMapping(path = "/hello", consumes = {"text/plain"})
public String testHello() {
return "hello webcat";
}
@HttpRequestMapping(path = "/bodytest", method = {ReqMethod.POST})
public String testBody(@ReqBody String body) {
return "hello webcat " + body;
}
@HttpRequestMapping(path = "/redirect", method = {ReqMethod.GET})
public void testRedirect(FullHttpResponse response) {
ResponseUtil.redirect(response, "http://lchml.com");
}
}
- logEnable,默认会打开所有websocket请求的日志。
- logResponse,默认日志中不会输入response内容。
- defaultProduce,默认返回content-type为application/json;charset=utf-8。
<bean class="com.lchml.webcat.config.WebcatHttpConf" id="webcatConf">
<property name="logEnable" value="true"/>
<property name="logResponse" value="true"/>
<property name="defaultProduce" value="application/json;charset=utf-8"/>
</bean>
Websocket Server 使用
在spring的配置中,加上对webcat的package扫描:
<context:component-scan base-package="com.lchml.webcat"/>
设置端口,设置连接初始化和断开的监听回调并启动:
public static void main(String[] args) throws WebcatStartException {
WebcatWsServer wsServer = context.getBean(WebcatWsServer.class);
wsServer.setPort(8081);
wsServer.setChannelConnectListener(new ChannelConnectListener() {
@Override public void connect(ChannelInfo channelInfo) {
channelInfo.addAttr("connectTime", System.currentTimeMillis());
System.out.println(channelInfo.getClientIp() + " connect");
}
});
wsServer.setChannelDisconnectListener(new ChannelDisconnectListener() {
@Override public void disconnect(ChannelInfo channelInfo) {
System.out.println(channelInfo.getClientIp() + " disconnect");
}
});
wsServer.start();
}
添加自己的controller:
<context:component-scan base-package="com.lchml.test"/>
@WsController(path = "/test")
public class TestWsController {
@WsRequestMapping(path = "/hello")
public Object testHello(String name, WsContext ctx) {
return "hello webcat " + name + " from " + ctx.getCi().getClientIp();
}
}
- heartbeat,默认心跳为15s,超过15s没有收到客户端心跳则视为连接断开。
- useProxy,默认没有使用代理,则直接使用RemoteAddress作为客户端ip,如果设置为true,会从路由信息中获取真实客户端ip地址。
- wsPath,默认path为/webcat,可以自行修改。
- logEnable,默认会打开所有websocket请求的日志。
- logResponse,默认日志中不会输入response内容。
<bean class="com.lchml.webcat.config.WebcatWsConf" id="webcatConf">
<property name="heartbeat" value="15"/>
<property name="useProxy" value="false"/>
<property name="logResponse" value="true"/>
<property name="logEnable" value="true"/>
</bean>
websocket模式,采用json格式做协议交互,格式如下:
{
"path": "/test/hello", // 请求的path,对应controller中的path
"mid": 1, // 请求的序号,用于对应请求和回包
"version": 0, // 版本号,可不用
"params": {"name": "holyshit"} // 业务的参数
}
所有的请求最后都会被组装为WsContext对象:
public class WsContext {
private String path;
private ChannelInfo ci;
private int mid;
private int version;
private Channel channel;
private Map<String, Object> params;
}
其中,ChannelInfo中会包含请求方的客户端ip,并且可以在ChannelConnectListener中自定义其他属性,params默认会根据Controller中方法定义映射到对应的参数上。
其他补充
项目结构截图如下
webcat——基于netty的http和websocket框架
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
相关文章
- Flask-最简单的Python http服务框架使用
- Foundation框架和文件操作
- HttpServer 3 框架【最简IoC容器、初步使用第三方DI库】
- 2.Magicodes.NET框架之路——策略管理
- stm32软件编程的框架及注意事项——rtos篇
- http框架--unirest介绍及使用示例
- 快速入门Gin框架搭建HTTP服务
- 利用SpringCloud搭建一个最简单的微服务框架
- Java 权限框架 Shiro 实战二:与spring集成、filter机制
- 《写给PHP开发者的Node.js学习指南》一第 2 章 简单的Node.js框架2.1 HTTP服务器
- AI for Science系列(三):赛桨PaddleScience底层核心框架技术创新详解
- vue实战入门后台篇三:springboot+mybatis实现网站后台-实体及基础框架搭建
- vue实战入门后台篇一:springboot+mybatis实现网站后台-项目框架搭建
- 分布式计算框架Spark
- Android 开发技术学习之Xpopup框架弹窗实现
- mybatis或hibernate框架连接数据库报错:java.sql.SQLException: No suitable driver或No suitable driver found for http://maven.apache.org
- 记一次和阿里某总监对话引发的思考:说说你框架的设计思路和优点亮点!
- Android框架Volley之:ImageRequest请求实现图片加载
- U3D客户端框架之实现基于UnityWebRequest的Http服务 实现HttpCallBackArgs参数类、HttpRoutine访问器、HttpManager管理器