ketty基于netty实现的服务端Nio MVC业务开发

联合创作 · 2023-09-30 00:19

Ketty



基于 netty 实现的服务端 Nio MVC 业务开发平台,提供性能监控,日志分析,动态扩展的功能。



ketty-srv模块



基于netty实现支持自定义协议扩展的Nio MVC高性能业务框架



协议



  • Http


  • Ketty(自定义私有协议)



基于注解的 mvc



  • @Inject注入


  • @Path 路径支持


  • @Param参数自动注入value



支持方法调用频率限制RateLimiter


@Actionpublic class SimpleAction {

    @Inject
    private UserService userService;

    // 每秒最多可调用100次,超过100次丢弃,
    @Rate(value=100)
    @Interceptor(id = "echoInterceptor")
    @Path
    public User getUserByUid(@Param String uid) {
        return userService.getUserByUid(uid);
    }}

拦截器 example


@Aroundpublic class EchoInterceptor extends BaseInterceptor {

    private final static Logger LOGGER = LoggerFactory.getLogger(EchoInterceptor.class);

    @Override
    public boolean before() {
        LOGGER.info("==============EchoInterceptor before=========");
        return true;
    }

    @Override
    public boolean after() {
        LOGGER.info("==============EchoInterceptor after=========");
        return true;
    }}

KettyServer example


// nio mvc 业务server启动类examplenew KettyServer.Builder()
                .tcpNoDelay(true)
                .soKeepAlive(true)
                .setHttpProtocol()
                .host("localhost")
                .port(8888)
                .build()
                .start();// 测试jetty客户端public class JettClientTest {
    public static ClientSender clientSender = new ClientSender("localhost", 8888);
    public static void main(String[] args) throws Exception {
        KettyRequest request = new KettyRequest();
        request.setUri("/simpleAction/getUserByUid");
        JSONObject params = new JSONObject();
        params.put("uid", "12345677");
        request.setParameter(params);
        String result = clientSender.sendAndWait(request);
        System.out.println("result : " + result);
    }}

HttpServer example


// nio mvc 业务server启动类examplepublic class SimpleServer {
    public static void main(String[] args) throws Exception {
         new KettyServer.Builder()
                        .setKettyProtocol()
                        .port(8888)
                        .build()
                        .start();
    }}

TODO



  • 支持自定义协议扩展


  • 安全验证


  • 性能优化


  • WebSocket协议的实现



ketty-client模块



KettyServer高可用NIO客户端



High availability


支持多个节点,节点不可用自动移除


Client pool


支持连接池


断链自动重连


自动维护心跳


ketty-codec模块



编解码框架



KettyRequest





























header body



size len uri msgId paramsMap body
short(2byte) short(2byte) string int(4byte) map JSONString

KettyResponse


























header body


size len msgId(消息id) resCode(消息返回码) body
short(2byte) short(2byte) int(4byte) short(2byte) JSONString

ketty-router模块



服务代理模块,提供路由分发功能



ketty-monitor模块



性能监控 报警



ketty-analysis模块



接口统计分析 智能推荐


浏览 4
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报