大项目demo部署记录 | 青训营笔记

434 阅读6分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天。今天对大项目的demo进行测试,虽然途中遇到一些问题,但最后终于成功在Win10、WSL和远程服务器成功部署服务端。下面对部署过程做一个简单的记录。

环境搭建

客户端

蓝叠模拟器5,因为我的手机不是安卓(使用安卓手机的部署请看这里),因此只能在电脑上运行客户端demo。电脑上运行的方式有:Android Studio中内置的模拟器,WSA(支持运行安卓的Windows子系统)、和各路厂商的安卓模拟器。前两者配置成本较高,因此选择了安卓模拟器。查询和对比了一下各个厂商的安卓模拟器,发现蓝叠是有安卓授权的,而且支持Hyper-V(意味着可以和WSL2共存),而很多其他的模拟器都只是基于Virtualbox和蓝叠做二次开发,因此选择了蓝叠。

下载完成后,只需将apk文件拖到桌面,即可运行。但此时因为服务端还没有启动,因此客户端会出现网络异常,接下来请往下面看。

image.png

服务端

服务端可以在Windows、WSL和远程服务器三个地方部署。在客户端中双击“我”按钮,便可以设置服务端的地址。下面分别说一下三个不同的部署方法。

image.png

Windows:打开Windows的Powershell或者CMD,输入ipconfig,找到这一个IP地址。

image.png

随后再替换掉原来的IP地址即可,以上面的IP地址为例,客户端中的服务器地址应修改为下图。

image.png

此时重启客户端的应用便可以看到画面中有视频出现,同时运行的服务端在点击相应按钮时,会有相应的请求信息。

image.png

Linux服务器

Linux服务器和Win10的配置类似,只需要把IP改成服务器的IP即可,其他的操作不变。操作成功后也可以在服务器看到如上图类似的请求信息。

WSL2

WSL2的服务端配置稍有麻烦,但是因为远程服务器性能有限(2核2g小水管怕后期开发性能较差和视频传输缓慢)、Win10对某些服务端的工具支持不完善(Redis、课程教授的Kitex框架不支持Win)再加上本人日常使用WSL2较多。因此WSL2成为了我的一个折衷解(传统的虚拟机也可以,只是用起来比较重)。下面来说说WSL2的服务端如何配置。

由于WSL2在网络连接上采用了NAT模式而不是桥接,因此如果我们想在局域网上访问WSL2中的服务,需要在Windows下配置一下端口转发。大概的流程是,模拟器访问我们Windows电脑网卡中的某个地址(IP+端口)(即客户端中配置的服务器地址,对应之前图片中的地址http://192.168.0.101:8080/。Windows电脑收到了这个访问,但是因为我们的服务端运行在WSL2中,且WSL2有一个独立的IP地址,因此电脑需要将模拟器的访问转发到WSL2中服务端的IP和端口。配置端口转发的流程可分为以下几步:

1. 打开防火墙中的8080端口,用于侦听来自模拟器的访问。打开的方法可以看这个链接

2. 找到WSL2的对应ip,在WSL2中输入下面的命令,查询结果中用红色框起来的这个就是WSL2的ip。

ip a | grep "global eth0"

image.png

3. 用管理员模式打开Powershell,随后输入该命令设置端口转发。命令中listenaddress为电脑网卡的ip和listenport改为客户端里双击我按钮所设置的地址中的IP和端口号(也就是上面的http://192.168.0.101:8080/ ,该端口号需要在第一步的防火墙中打开,这里默认设置为8080,有需要可以自己改),connectaddress为上一步查询得到的WSL2的ip地址(WSL2的IP每次开机都会变,因此每次开机都需要重新设置),connectport为WSL2中服务端的端口号(demo代码中默认为8080),通信协议protocol为tcp协议。

netsh interface portproxy add v4tov4 listenaddress=192.168.0.101 listenport=8080 connectaddress=172.18.133.139 connectport=8080 protocol=tcp

输入上面这行命令后,便成功设置端口转发,此时打开客户端,设置服务器的地址为http://listenaddress:8080/ 即可,这里的listenaddress替换为自己ipconfig所查询出来的结果,如无意外地话和上面介绍的在Windows下调试的地址是一样的。

完成了WSL2服务端的配置后,还需注意以下几点:

1. 端口转发设置完后,在每次关机之前最好把设置的转发规则删除掉,以免影响日后其他工具的使用,而且WSL2的ip每次开机都会变化,因此每次都要重新配置,之前的规则留着也没用。删除的命令在下面:

# 显示设置的所有转发规则
netsh interface portproxy show all

# 删除当前设置的某个转发规则
netsh interface portproxy delete v4tov4 listenaddress=192.168.0.101 listenport=8080

2. 某些安卓模拟器和WSL2会有冲突,可能重启电脑后,会导致WSL2无法启动,这时可以在Win的搜索框中搜索启用或关闭Windows功能,检查一下是否有打开Hyper-V,如果没有的话,勾上再重启就可以启动WSL2了。之前用雷电模拟器会有这种奇奇怪怪的问题,导致关闭了模拟器后WSL2经常打不开,换成了蓝叠模拟器暂时没发现该问题。

测试App功能

成功完成服务端和客户端的通信测试后,我们可以随意点击App的客户端,然后查看服务端的debug日志,看看点下按钮后是否有请求到对应的功能。此外,我们还可以测试一下上传视频的功能。点击我注册一个用户后,再点击App中间的 +,就可以上传视频。

image.png

此时我们可以从电脑中随便拖拽一个视频到模拟器的桌面,再点击App中的上传按钮,便可以查看到我们刚刚拖拽进来的视频了。

image.png

此时可以看到服务端中收到了对应的上传视频请求,并且在服务端的public文件夹先可以查看到客户端上传的视频,此时证明服务端和客户端通信正常,大功告成!

image.png

image.png