TCPServerConnectionResource TCP服务器连接资源
TCPServerConnectionResource 算子属于资源类线程算子,用于在 RVS 的分线程中启动一个TCP服务器资源。
通过添加TCP服务器连接资源,使用 RVS 中 TCPServerReceive 算子(TCP服务器接收) 和 TCPServerSend 算子(TCP服务器发送) 来获取TCP服务器收到的消息 或 通过TCP服务器给已连接的客户端发出消息
算子参数
-
自动启动/auto_start
:用于自动开启资源算子。-
是/True:打开 RVS 软件后第一次进入运行状态时自动开启资源线程。
-
否/False:不自动开启资源线程。
-
-
启动/start
:用于开启资源算子。-
是/True:勾选为是,开启资源线程。
-
否/False:不启动资源线程。
-
-
停止/stop
:用于停止资源算子。-
是/True:勾选为是,停止资源线程。
-
否/False:不停止资源线程。
-
-
重置/reset
:重置该资源。在该资源算子已经运行后,如果重新更改属性参数,需要点击重置
,然后重新勾选启动
运行。 -
端口/port
:服务器监听的端口号。默认:7000
功能演示
下面有两个简单的样例演示,便于用户了解在RVS中如何通过TCP服务器连接资源进行收发信息
-
演示一 接收字符串并回复(可习得通讯指令和自定义格式的用法)
-
演示二 接收两组不同Pose并回复PoseList(可习得其他数据类型和分隔符用法)
演示一 接收字符串并回复
通过这个演示,可以习得TCP通讯基础使用,我们将接收具有特定开头的字符串信息,并将其中信息添加后缀内容自动回复给客户端。
步骤1:添加TCP通讯所需算子
添加 TCPServerConnectionResource 、TCPServerReceive 、TCPServerSend 算子至算子图。
步骤2:配置算子参数
1.设置 TCPServerConnectionResource 算子参数:
-
自动启动 → 是
-
设置 TCPServerReceive 算子面板:
按➕号添加一条接收触发指令
-
启用 -> 开启(默认)
-
指令 -> hello
-
指令分隔符 -> Space
-
包含数据 -> String
-
数据分隔符(在string类型下无用)
-
后缀 -> (什么都不填)
-
备注 -> 接收hello(可不填)
点击应用,算子端口同步变化
-
-
设置 TCPServeSend 算子面板:
按➕号添加一条发送指令
-
启用 -> 开启(默认)
-
端口名 -> reply
-
数据类型 -> String
-
前缀 -> (什么都不填)
-
数据分隔符(在string类型下无用)
-
后缀 -> Yes!(前面有个空格)
-
是否列表 -> 关闭(默认)
-
列表分隔符(在”是否列表”为”关闭”的情况下无用)
-
备注 -> 回复Yes!(可不填)
点击应用,算子端口同步变化
-
步骤3:连接算子
步骤4:运行
-
启动RVS,TCP服务器连接资源算子变蓝色,如果未变色,勾选该资源算子的启动,或查看日志启动失败的原因
-
此处使用网络调试助手充当客户端演示通讯过程,远程地址填写本机IP,端口与资源算子端口号相同
-
调试助手连接到服务器资源,RVS日志显示连接信息
-
调试助手发送hello(空格)+[消息内容]的字符串,触发TCPServerReceive算子的hello命令,RVS收到内容后传递给TCPServerSend算子,回复给调试助手
-
查看TCP服务器接收面板,更新面板后,可看到这个算子的活动信息,TCP服务器发送面板同理
-
查看数据线,内容为TCP通讯接收到的消息,日志栏显示收发记录
-
重复第4步,但发送不同的消息,再次查看这个效果
-
断开TCP连接,日志栏显示客户端断开
说明
在这个演示demo中,用TCPServerConnectionResource算子创建了一个监听7000端口的TCP服务器,用TCPServerReceive算子接收所有用”hello(空格)”为开头指令的TCP消息,并把消息通过TCPServerSend算子发出,发送格式为消息内容加后缀”(空格)Yes!”,发出的消息通过TCPServerConnectionResource给到已连接到的客户端。
演示二 接收两组不同Pose并回复PoseList
通过这个演示,可习得如何通过TCP通讯把收到的字符串处理为其他的数据类型,以及分隔符的用法
步骤1:添加TCP通讯所需算子
添加 TCPServerConnectionResource、TCPServerReceive、waitAllTriggers、Join、TCPServerSend 算子至算子图。
步骤2:配置算子参数
-
设置 TCPServerConnectionResource 算子参数:
-
自动启动 → 是
-
设置 Join 算子参数
-
类型 → 坐标
-
输入数量 → 2
-
设置 TCPServerReceive 算子面板:
按➕号添加一条接收触发指令
-
启用 -> 开启(默认)
-
指令 -> setPose1
-
指令分隔符 -> NONE(默认)
-
包含数据 -> Pose
-
数据分隔符 -> ,(逗号)
-
后缀 -> (什么都不填)
-
备注 -> 接收pose(可不填)
按➕号添加一条接收触发指令
-
启用 -> 开启(默认)
-
指令 -> setPose2
-
指令分隔符 -> !
-
包含数据 -> Pose
-
数据分隔符 -> $
-
后缀 -> #
-
备注 -> 接收另一个pose(可不填)
点击应用
-
-
设置 TCPServeSend 算子面板:
按➕号添加一条发送指令
-
启用 -> 开启(默认)
-
端口名 -> poseLIst
-
数据类型 -> Pose
-
前缀 -> list:
-
数据分隔符 -> -(减号)
-
后缀 -> over
-
是否列表 -> 开启
-
列表分隔符 -> ;(分号)
-
备注 -> 发送PoseList(可不填)
点击应用
-
步骤3:连接算子
步骤4:运行
-
启动RVS,TCP服务器连接资源算子变蓝色,如果未变色,勾选该资源算子的启动,或查看日志启动失败的原因
-
调试助手连接到服务器资源,发送第一个Pose信息,注意,命令关键字为setPose1,留意大小写,命令分隔符为NONE,即命令后直接跟随Pose数据,数据之间的分隔符为逗号,没有后缀
setPose111,22,33,0.1,0.2,0.3
-
发送第二个Pose信息,注意,命令关键字为setPose2,留意大小写,命令分隔符为叹号,即命令后添加”!”再跟入Pose数据,数据之间的分隔符为”$”,最后添加后缀#
setPose2!44.4$55.5$66.6$0.4$0.5$0.6#
-
此时两个pose数据均已发出,WaitAllTriggers算子执行后将两个pose合并成poseList,通过TCPServerSend算子发出,客户端收到合并的数据,数据使用”list:”开头,跟随一串Pose值,数据间使用”-”分割,Pose和Pose之间使用”;”分割,最后用预设的后缀”over”结尾
list:11.0000-22.0000-33.0000-0.1000-0.2000-0.3000;44.4000-55.5000-66.6000-0.4000-0.5000-0.6000over
5.查看接收和发送面板,以及RVS日志信息,了解此次收发运行细节
其他设定/技巧
-
不包含数据的外部触发
接收算子的包含数据设为NONE,将不在有输出的数据端口,当TCP服务器收到的消息与设定的命令一致时,即可触发该信号端口。利用这个特点可以实现通过TCP客户端远程触发RVS的业务流程。
-
指令字符串/端口名
接收算子的端口名和设定的指令字符串始终一致,因此不能使用会被RVS中英翻译的字符串为指令名(例如trigger、TyCameraAccess等),发送算子的端口名同理
当指令使用字符或数字开头时,端口名会生效,但属性面板将不显示该输出端口属性,日志会报错”……这个名称包含了无效的XML元素名称……”,这个情况下并不影响RVS的通讯运行,可以正常使用
-
发送算子string端口悬空
对于TCPServerSend算子,当数据类型为String,且未勾选”是否列表”时,它的数据端口可以不接入任何数据线,默认输入的数据未空字符串,当被触发时,将会按设定的发送格式发出前缀+后缀的内容。利用这个特性,可以发送固定内容的字符串信息,而不用额外的EmitString算子去生成所需信息并发送
-
收发独立
得益于TCPServerReceive和TCPServerSend两个算子拆分的设计,RVS的TCP服务器将不再局限于收发回复的工作模式,在运行期间始终可以接收符合指令设定的字符串信息,同时也可在任意时刻触发发送指令给客户端发送消息。可以只收不发,也能只发不收。
-
多客户端广播
TCPServerConnectionResource不限定接入客户端的数量,开放端口但不定IP的设计允许不同网段的设备同时连接到RVS的TCP服务器,所有已连接的客户端都可以用正确的通讯指令触发对应的接收算子。
发送算子也采用像”广播”一样的发送模式,对于所有连接到的客户端,都会收到该TCP服务器发出的消息。 如果期望单个发送算子仅对单个特定客户端通讯,请考虑使用多个TCPServerConnectionResource资源算子,通过不同的端口号进行服务区分,发送算子和单独的客户端只使用对应的资源算子即可。
-
多收发算子公用资源
TCPServerReceive和TCPServerSend算子在算子图中并不限制使用数量,对于较多的通讯指令(一般由业务复杂导致),可以拆分给多个收发算子分别处理,增加算子减少连线,让业务逻辑更清晰。 多个接收算子可以使用相同的指令,客户端一次发送,所有接收算子的对应指令都会被触发。(单个接收算子的多个相同指令只会触发一个)。
-
不支持转义字符
该通讯方式不支持使用转义字符(如\r\t)或具有特定含义的字符(如EOF),这类字符会被当作常规字符处理。如有转义字符需求,请考虑二次开发算子自行实现。