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(可学习其他数据类型和分隔符用法)。
演示一 接收字符串并回复
通过这个示例,学习如何接收具有特定开头的字符串信息,并将其中信息添加后缀内容自动回复给客户端。
步骤1:添加TCP通讯所需算子
添加 TCPServerConnectionResource 、TCPServerReceive 、TCPServerSend 算子至算子图。
步骤2:配置算子参数
-
设置 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),这类字符会被当作常规字符处理。如有转义字符需求,请考虑二次开发算子自行实现。