基于Netty的高性能双向通讯框架

源码

double-connect: 双全工通讯源码

概述

        当我们期望开发一个高性能的基于tcp的通讯框架时(例如:自研一个rpc调用框架或者封装一个并发量为百万级的游戏通讯框架),虽然netty已经极大程度上帮我们封装了nio,但面对netty仍需要我们学习、踩坑。因此,我们将netty进一步封装简化,使用极少的代码(比例,10行左右)就可快速开发一个服务端和客户端。基于该框架,我们开发了内网穿透工具

内网穿透工具源码

快速上手

//创建一个服务端
Server server = Server.create(8888);
//定义一个控制器,和springmvc类似
server.addController(new Object() {
    //定义一个接口,参数必须是Request类型,返回值必须是Serializable或Promise类型,并使用@Mapping进行注解
    @Mapping("/test")
    public String test(Request request) {
        return "你好:" + request.getBody();
    }
});
//启动服务
server.start().syncR();
//创建一个客户端并启动
Client client = Client.create("localhost",8888).start().syncR();
//发起请求并获取返回值
String r = (String)client.request("/test","张三").syncR();

更丰富的操作

1. 客户端也支持添加controller,由服务端调用客户端

        client.addController(new Object(){....});

2. 客户端支持向服务端注册,并且支持元数据

//"?"后面的为元数据

Client.create("localhost",8888,"客户端名称?power=100").start().syncR();

3. 服务端支持调用客户端的接口

server.request("客户端名称","/test","张三").syncR();

4.服务端支持自定义客户端选择器,应用于多客户端注册的情形。选择器可依据客户端注册时的元数据进行筛选。

server.setChannelSelector(new ChannelSelector(){...})

5.客户端和服务端都支持广播模式,即消息投递出去无响应

client.broadcast("/test","数据");

特殊类说明

1.Promise

        这是一种特殊的数据类型,参考前端中的Promise,可异步加收响应结果。也可阻塞等待结果返回。

2.Request

        这是服务端和客户端交互的请求封装,可获取请求中的消息。

3.RequestContext

        请求上下文,可获取当前请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值