# double-connect **Repository Path**: beiding/double-connect ## Basic Information - **Project Name**: double-connect - **Description**: 基于netty的双全工通讯框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-21 - **Last Updated**: 2023-09-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ​ **概述**         当我们期望开发一个高性能的基于tcp的通讯框架时(例如:自研一个rpc调用框架或者封装一个并发量为百万级的游戏通讯框架),虽然netty已经极大程度上帮我们封装了nio,但面对netty仍需要我们学习、踩坑。因此,我们将netty进一步封装简化,使用极少的代码(比例,10行左右)就可快速开发一个服务端和客户端。基于该框架,我们开发了内网穿透工具 内网穿透工具源码:https://gitee.com/beiding/natgo2 **快速上手** //创建一个服务端 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         请求上下文,可获取当前请求 ​