
无需Netty客户端,直接使用API工具调试Netty服务端接口🥳
前言
在日常业务开发中,http接口是最为常见的,通常使用api接口工具(例如Apifox)直接调用Springboot的Controller层即可对接口进行调试。但有些对低延迟高并发要求较高的业务,通常需要使用性能更强的Netty来进行处理,对于Netty服务端的调试,较为常见的做法是构建一个Netty客户端,将需要发送的报文通过客户端来发送出去,这样做的好处是不依赖其它工具直接在Java中即可完成。但这种方式弊端也是相当明显的,当我们需要调试多个接口时,需要将多个报文内容写在程序里,每次发送哪个,就将其传给客户端,需要反复更改代码,很容易误操作。
那平常调试http接口时使用的Api工具能否将其也用到TCP接口(例如本次使用的Netty)上呢。经过翻阅Apifox的官方文档,我发现是可以的,而且操作起来并不困难,支持的功能也非常齐全。下面来简单介绍一下如何使用Api工具(以Apifox为例)来调试TCP接口(以Netty为例)。
使用方式
首先需要构建一个Netty服务端,这里就不演示了,网上有很多Springboot集成Netty的入门案例,很轻松即可部署一个Netty服务器,这里着重演示Apifox的使用方式。
首先打开Apifox新建一个接口,但不要选择默认的http接口,而是选择【其他类型接口】→【TCP】
新建一个Socket服务,填写你Socket服务器的信息即可,对于分批返回报文数据的接口,可以修改判断报文接收完成的方式。
保存Socket服务后添加一个接口即可,如果需要修改服务器的信息也可以在此页面进行编辑。
接口信息可以任意填写,但下方的请求参数需要注意,如果你的请求参数只是一段字符串例如“0101|xx|xxxxxxx|abcd|测试123|01”,一般选择raw+文本编辑器即可,如果是JSON或xml格式的对象,应选择对应格式+表单。这里不确定的话可以都试一试。
很多报文头部有报文长度验证,或报文尾部有核验码,这时候可以选择下方的数据处理函数
这里需要注意,有时Netty服务器收到汉字时,会将其转为UTF-8格式,这种格式下,一个汉字的长度为3,但Apifox在计算时对于汉字的长度仍按1来进行处理,所以如果服务器提示报文长度错误的话,请检查你的请求参数中是否包含中文,如果包含的话,可以手动写一个JavaScript函数来处理中文的长度,使其按3来进行计算。
例如在MySQL中,select length(‘abc’) 结果是3。select length(‘测试’) 结果是6。
这里将我使用的函数展示,仅供参考。如果你有其他特殊需求,直接使用JavaScript进行改写即可
// 计算数据长度
function calculateLength(data) {
let length = 0;
for (let i = 0; i < data.length; i++) {
// 如果是汉字
if (data.charCodeAt(i) > 0x7F) {
// 汉字按3个字符计算
length += 3;
} else {
// 其他字符按1个字符计算
length += 1;
}
}
return length;
}
// 获取报文的实际长度
const actualLength = calculateLength(data);
// 补齐长度,确保长度字段为6位,例如长度为15时,返回 000015 ,可根据实际需求更改
const lengthField = String(actualLength).padStart(6, '0');
// 返回完整的报文(拼接长度字段 + 数据)
return lengthField + data;
完成这一步后,到运行页面,输入Netty服务器的地址以及请求参数,点击发送即可在后端收到该请求了~
总结
感谢你看到这里,以上就是本文的全部内容了,通过以上步骤,即可在Springboot程序中使用Apifox来进行Netty接口的调试,不再需要手写一个Netty客户端了,如果你有更好的方法,欢迎到评论区留言讨论!
Make Java Great Again!