Vision开发日志2

  今晚成功搞定了Unity端和树莓派的低时延通信,哈哈哈!

  并没有采用上次最后设想的自建broker的mqtt方案。既然我需要在服务器上自建broker,那为什么不直接通过服务器的公网ip来进行低时延的udp通信呢。由于国外的服务器延时较大,于是我决定通过国内的服务器来实现我的设想。

  首先比对了阿里云和腾讯云提供的服务器解决方案,发现阿里云有个3个月的免费试用期,正好适合我的测试项目。于是我拥有了我人生中的第一台服务器。

  现在需要解决的问题是如何将树莓派的私网ip借由阿里云的ecs服务器暴露到公网,让我的Unity端能够访问从而实现udp通信。经过一番的信息检索,发现可以利用frp进行内网穿透。需要在ecs服务器上部署frp server,然后在树莓派端部署frp client,最后让客户端和服务器端建立连接。这样一来Unity端发出的udp数据包会先发送给部署有frps的ecs服务器,然后通过服务器再转发给部署有frpc的树莓派端。并且我的ecs服务器站点在杭州,时延会大大降低。

  根据网上的资料设置好ecs服务器的安全组,开放端口,然后再配置frps的启动文件并顺利启动了frps。在服务器上配置并没有遇到什么问题,接着在树莓派上开始配置frp的客户端,基本上都是如法炮制。最后在双端配置完成后,修改C# 脚本中的的服务器ip和端口,启动树莓派上的Python脚本,启动Unity,测试发送!

  不对劲,很不对劲。Unity显示发送了,但是树莓派没有接收到。花了亿点时间排查后发现树莓派客户端根本没有连接上frp服务器端。这就很奇怪了,明明用于建立frp服务器端和客户端的ecs安全组端口都已经开放了,却无法建立联系,客户端一直显示try to connect…。最后在求助ai和查阅相关资料后发现,原来frpc和frps在建立连接时候使用的是tcp协议,而我开放的是udp的端口,怪不得无法成功建立联系。

  在找到问题所在后我赶紧修改安全组的配置,将原来的udp修改为tcp,最后重新建立连接进行测试。Unity,启动!我在文本框中输入一串字符,点击send按钮。几乎是在我按下send按钮的瞬间,树莓派的Python终端上显示出了我输入的字符“hello pi”!!!

  nb!我成功实现了让Unity和树莓派的低时延通信,这对于EGGER Vision而言是一个重大的技术突破!

  完成今晚的任务后,蹦蹦跳跳去楼下买泡面吃咯!