在基于Cordova的游戏上实现WiFi多人游戏第3部分

发布时间:2019-08-23 14:12
文 章
摘 要
最初发布在cownado.com博客上。 通过WiFi结束我们关于本地多人游戏的系列,我们将解决防止本地主机名解析的Android错误,我们将看到直接使用IP地址而不是主机名时要考虑的方面。 起初,使用设备IP地址而不是主机名可能看起来没什么大不了的,但Apple有一份很

最初发布在cownado.com博客上。


通过WiFi结束我们关于本地多人游戏的系列,我们将解决防止本地主机名解析的Android错误,我们将看到直接使用IP地址而不是主机名时要考虑的方面。

起初,使用设备IP地址而不是主机名可能看起来没什么大不了的,但Apple有一份很好的文件说明为什么实际上这是一个非常糟糕的实践。

在我们的具体案例中,有两个重要方面需要考虑:

该设备具有多于1个网络接口,因此具有多于1个IP地址(例如:1个用于WiFi网络的IP地址,以及1个用于蜂窝网络的IP地址)该设备可以兼容IPv4和IPv6,因此具有IPv4和IPv6地址,但服务器可能只能在IPv4上侦听,或者只能在IPv6上侦听

因此,我们不能直接使用 zeroconf.watch 函数返回的IP地址,因为我们不知道要使用哪个IP地址。

这里的解决方案是,在服务器端,我们首先要知道设备是在IPv4还是IPv6上进行列表,然后在Zeroconf TXT记录上公布WiFi接口的IPv4或IPv6地址,因此服务器设置将变得像:

变种SERVICE_TYPE ='_ my-service._tcp。',HOST_NAME ='我的主人';//指定0作为端口号,以便使用随机空闲端口wsserver.start(0,{onStart:function(addr,port){VAR接口,ip_addresses;if(cordova.platformId ==='android'){//在Android上,WiFi接口名称为wlan0interface ='wlan0';} else if(cordova.platformId ==='ios'){//在iOS上,WiFi接口名称为en0interface ='en0';}//检查我们是否正在侦听IPv4或IPv6if(/^[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1 ,3} $ /.test(addr)){ip_addresses ='ipv4Addresses';} else {ip_addresses ='ipv6Addresses';}//调用getInterfaces以了解每个网络接口的IP地址wsserver.getInterfaces(function(result){zeroconf.register(SERVICE_TYPE,'local。',HOST_NAME,port,{//在TXT记录上发布正确的IP地址server_ip:result [interface] [ip_addresses] [0]},function(result){//这里我们成地宣传了这项服务});});},//其他服务器的东西......});
	
上一篇:一个开放世界的军事射击游戏,模仿感觉像侠盗猎车手
下一篇:Apple增加了礼品应用程序的能力,iTunes中的游戏