在开发基于 UDP 的应用时, 如果通信目标未就绪或者临时不可用时, 可以使用 Bittly 的模拟服务虚拟一个支持 UDP 通讯的通讯终端。本文将介绍如何使用Bittly工具,实现对UDP请求的自动响应、动态数据处理、数据分帧以及数据转发。我们将从服务的准备工作开始,逐步讲解每一个步骤,帮助你快速搭建一个高效的UDP请求处理模拟服务。
准备
在开始之前,请确保您已经安装了Bittly工具。如果还没有安装,可以通过以下链接进行下载 Bittly 并安装 :
Bittly 下载 - 开始使用 Bittly 设计、开发和管理您的数据交互
新建并启动服务
新建 UDP 的模拟服务可通过点击模拟服务模块边侧栏顶部的 +
(新建) 按钮, 并在打开的新标签中选择 UDP 模拟服务即可完成 UDP 模拟服务的创建。 新建的模拟服务默认以本地服务进行通讯配置。
当服务创建后,会自动创建一条默认匹配响应规则, 即当服务收到任何数据后都直接将收到的内容直接响应给客户端,您可通过该规则来验证服务是否正常。
自动响应
自动响应是为了在 Bittly 收到消息内容后, 根据配置的匹配响应规则自动生成响应内容并发送给消息来源终端。
例如,假设我们希望 Bittly 在收到 hello
后,自动将 how are you
响应给消息发送端, 则我们可以进行如下配置:
在配置完成新规则后,需要重新启用服务来应用上面配置的响应规则。 然后,当我们再次发送 hello
到 Bittly 时,Bittly 便会根据我们配置的这条规则自动响应 how are you
给消息来源终端。
Bittly 的匹配类型支持多种, 例如文本,HEX, 通配符 ,正则表达式, JSON,表达式等。您可根据您具体的需要来选择不同的匹配方法, 我们以 JSON 为例:
我们新建一条匹配规则, 并将 匹配类型
选择为 JSON
用来匹配 JSON 格式的消息内容。
在 Bittly 处理该匹配规则时,会将消息内容解析为JSON对象,并通过 $request
应用到匹配内容的上下文中,我们在 匹配内容
的配置中, 可以使用 $request
对象来访问 JSON数据, 例如 $request.action
则可以用于访问 JSON {"action":"login"}
中的 action
属性。匹配内容为一个有效的 javascript 表达式, 例如 $request.action === "login"
或者 $request.number < 100
等。
响应类型也同样选择 JSON
作为内容格式, 响应内容即为需要发送给目标的 JSON 内容。
动态数据
如果我们在消息发送出去之后希望每次得到的响应内容并不是一直不变的,而是希望能够根据业务需求来动态生成一些比较合理的响应内容。 例如在登录后随机响应一个 accessToken
值等。
在 Bittly 中,动态数据也是被支持的。 在匹配规则的配置中, 响应内容实际为响应数据的模板, Bittly 会先通过编辑消息模板得到真实的消息内容, 然后再将得到的真实消息内容发送出去。 在消息模板中, 我们可以调用函数或者引用变量来生成动态内容。
假设我们定义一个 用户名
变量,其值为 sige
, 并且我们在响应内容中配置如下 :
hello, {{$var("用户名")}} !
那么, 实际发送出去的内容为:
hello, sige !
被 {{}}
所包裹的部分为动态内容,可进行函数调用或变量引用,这部分会被模板引擎进行自动替换。
如上图所示,响应消息中的 UUID, Random String, Random Number等 都是自动生成的, 其中, 响应内容如下:
UUID = {{uuid()}}
Random String = {{randomString(16)}}
Random Number = {{randomNumber(0,100)}}
Fake Email = {{fake('internet.email')}}
在消息模板中, 可以使用 {{$var("变量名")}}
来引用变量并输出变量值。
在模板中,如果存在比较复杂的计算或业务过程,可通过自定义函数的方式封装成函数,然后再模板中进行引用。 例如:
通过脚本定义完成函数后, 即可在消息模板中引用, 例如:
{{myFunction("meili")}}
假设变量 用户名
内容为 sige
, 则输出消息内容如下:
hello, meili & sige
数据分帧
当收到的数据内容不完整需要等待后续数据,或者收到的内容超出需要的长度需要进行截断时,就需要使用 Bittly 的数据分帧操作。 Bittly 的数据分帧是根据您所配置的分帧规则将数据进行拼装或裁剪到可处理的数据长度。
Bittly 支持多种分帧方式, 例如固定长度, 匹配头尾, 正则表达式, JSON 等, 您可根据您的数据内容进行选择合适的分支方式。
我们以 JSON
为例 :
当 Bittly 收到的数据内容中包含多个 JSON 数据信息则会被自动分割并作为两次消息进行处理, 例如我们发送如下消息:
{"action":"login"}{"action":"login"}
则 Bittly 收到消息后自动分割成两次消息请求,并分别进行处理,即如上图所示。
数据转发
Bittly 数据转发的作用是将发送到 Bittly 的请求自动转发到其他通讯连接上, 并将响应内容发送回原始终端。 其工作流程如下:
使用数据转发功能仅需要选择对应的通讯连接即可, 例如:
需要注意的是, Bittly 的数据转发仅仅针对没有匹配任何响应规则的请求,即响应规则的处理优先级大于转发的优先级, 如果响应规则中存在一个匹配任意内容的规则, 则数据转发即使被启用也不会被执行。
由于匹配规则优先级大于转发的优先级, 所以在模拟 UDP 服务的同时, 可以逐步的禁用掉某些规则使其通过转发来实现业务功能, 从而实现逐步的替换模拟服务到后台真实服务中。
结束
到这里,我们了解了如何使用 Bittly 模拟一个 UDP 服务,从最基本的服务启动,到自动响应规则的配置,再到处理动态数据和脚本,以及最后如何利用请求转发功能与实际服务端进行对接。这些功能在 UDP 开发中都能极大地提高开发效率和测试效果。
在实际开发中,使用 Bittly 让我们能够快速构建并测试客户端逻辑,无需等待服务端完全开发完成。随着项目的推进,还可以探索 Bittly 的更多高级功能,比如复杂的请求处理、脚本扩展等,进一步提升开发效率。
如果你在使用 Bittly 的过程中遇到任何问题,或者有其他有趣的应用场景,欢迎在评论区与我分享。希望这篇文章对你的 UDP 开发有所帮助,也期待你的反馈与讨论。