服务端开发
服务端开发
本节内容介绍 VSOA 服务端使用订阅与发布的方法。
开发须知
VSOA 服务端的数据发布分为“普通发布方式”和“快速发布方式”。
当服务端需要大量高频的发布数据时,可以使用快速发布的方式。快速发布进行大量高频的数据发布无法保证所有数据都能有效的到达,因此客户端在接收时可能会存在数据的丢失,使用快速发布的条件是这些丢失的数据并不影响程序的实际效果。若数据的变化是离散的而非连续的,使用快速发布可能会存在弊端。
在 VSOA 的底层实现中,普通发布方式基于 TCP,快速发布方式基于 UDP,当有大批量快周期更新数据的传输需求时,应当使用快速发布方式,否则 TCP 的丢包会因恢复时间过长导致实时性下降。
常用接口
说明:
发布与订阅服务端的详细接口说明可参考以下手册:
- C 版本可参考 VSOA C 语言编程手册。
- JavaScript 版本可参考 VSOA JavaScript 编程手册。
- Java 版本可参考 VSOA Java 编程手册。
- Golang 版本可参考 VSOA Golang 编程手册。
普通发布方式
如下在 axis_server 微服务中封装一个陀螺仪数据发布的接口,对外提供一个 /axis
资源对数据进行发布。
说明:
- 在 Node.js 的环境中,不需要事件循环,即删除
require('iosched').forever();
。- 在 Node.js 的环境中,
socket.AF_INET
应为vsoa.AF_INET
,详情可见 https://www.npmjs.com/package/vsoa 。
快速发布方式
C 语言环境
对于 C 语言环境,将如下接口进行替换即可:
/*
* Publish /axis
*/
vsoa_server_publish(server, &url, &payload);
替换为:
/*
* Publish /axis
*/
vsoa_server_quick_publish(server, &url, &payload);
Java 语言环境
对于 Java 语言环境,将 publish
的最后一个参数设置为 true
即可:
/*
* Publish /axis
*/
server.publish("/axis", new Payload("{ \"roll\": " + roll++ + "\"pitch\": " + pitch++ + "\"yaw\": " + yaw++
+ "}", null));
替换为:
/*
* Publish /axis
*/
server.publish("/axis", new Payload("{ \"roll\": " + roll++ + "\"pitch\": " + pitch++ + "\"yaw\": " + yaw++
+ "}", null), true);
JavaScript 语言环境
对于 JavaScript 语言环境,将 publish
的最后一个参数设置为 true
即可:
/*
* Publish /axis
*/
server.publish('/axis', {
param: {
roll: roll++, pitch: pitch++, yaw: yaw++
}
});
替换为:
/*
* Publish /axis
*/
server.publish('/axis', {
param: {
roll: roll++, pitch: pitch++, yaw: yaw++
}
}, true);
Go 语言环境
对于 Go 语言环境,将如下接口进行替换即可:
s.Publish("/axis", 1*time.Second, publishFunc)
替换为:
s.QuickPublish("/axis", 1*time.Second, publishFunc)
注意事项
C/C++ 服务端编译时需链接如下表所示的 VSOA 动态库,在 RealEvo-IDE 中配置时请参考 C/C++ 开发示例,Linux 下开发请参考 搭建 Linux 运行环境 提供的 C 语言范例进行配置。
库名称 | 功能 |
---|---|
libvsoa-json.so | 提供 JSON 功能 |
libvsoa-server.so | 提供服务端功能 |
libvsoa-parser.so | 提供参数解析功能 |