温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SmobilerService 新功能 “路由发现”

发布时间:2020-07-01 21:26:04 来源:网络 阅读:444 作者:smobiler 栏目:编程语言

什么是路由发现?这是我们近期正忙于开发的一项 SmobilerService 功能之一。


“路由发现”目前仅仅作为一个内部代号被使用,最终正式的名称是否有变化暂时尚不可知,如果你有什么更好的提议,可以和我们一起聊聊。

但总之,我们希望借此解决的是:当 APP 处于纯内网时,首次启动需要连接公网的问题。借助路由发现,纯内网 APP 不再需要连接公网即可直接启动。

APP 初次启动必须连接公网可能阻碍了一些企业使用 Smobiler 应用的决心。部分企业应用在内网即可运行使用,而首次启动需连接公网为这些用户带来了不便。


为什么 APP 启动需要连接 Internet 公网

这样的做法,在技术和使用感受两个层面,主要是基于以下这一问题的考虑:

服务器 IP 地址在打包时即写死在 APP 中时,虽然 APP 可实现纯粹的离线启动,但是服务器地址一旦改变,则所有应用都需要重新打包并再次分发。这显然是不合理的,没有应用会为了修改一个 IP 地址而推出新版本。

当安装应用的人数越多时,这一情况会变的愈发复杂。


因而云平台在诞生时,为了尝试解决这一问题,就在应用启动时为它进行了一次自动的、类似 DNS 解析的行为,告知 APP 服务器所在地址,由此很好的解决了服务器 IP 变更需要充分打包并分发应用的问题。目前,当你的服务器地址发生变化时,只需要登录云平台进行修改并保存,则客户端即可立即得知以恢复链接而无需重新分发应用。

如下便是修改服务器 IP 地址的云平台界面:

SmobilerService 新功能 “路由发现”

你也能在打包时获得修改服务器 IP 地址无需重新打包的提示:

SmobilerService 新功能 “路由发现”


云平台在 APP 启动时,就已经为应用进行了一次 DNS 操作,将你的设备正确的导向了指定服务器,避免了往复和重新打包、分发带来的资源浪费。

同时,随着用户群体的不断扩大,市场部门希望了解用户数的增长趋势等数据以指导今后的推广工作。鉴于 DNS 功能的存在,我们简单的对 DNS 解析记录分类、求和计算,便可以得到这些运营信息,帮助市场部门随时观察推广结果,改进方案。

在 Smobiler 启动硬件计划后,这一过程也被用于认证 Smobiler 所销售的设备的合法性。


因而我们最终打算通过 SmobilerService 路由发现功能来解决内网用户的问题。首先实现纯内网设备可以正常启动,同时我们仍旧可以验证 Smobiler 设备。


我们曾设想过使用类似“服务发现”的思路来解决内网问题

所谓服务发现,就是当 APP 与服务器运行在同一局域网中时,APP 能够通过某种方式,自动发现运行在同一局域网中的服务端 。

这主要涉及 3 种局域网设备发现手段:

  • 单播

  • 广播

  • 组播


单播很容易理解,简而言之就是一台设备在已知另一台设备 IP 地址的情况下,单独向其发送消息。

广播则是一台设备向整个局域网中,同一网段内的所有设备发送消息。

组播是前两者的融合和提升。通过一个指定的预留 IP 地址(公网或内网),加入了此地址的设备形成一个组,然后单一设备向该地址发送消息,其余在组内的设备皆可接收。


看样子广播和组播能够实现我们想要的功能。

但不幸的是:

  • 广播只能向同一网段内的设备发送消息。例如,192.168.1.10 与 192.168.1.20 在同一网段则可互相接收广播。


但 192.168.1.10 与 192.168.2.20 就不在同一个局域网网段下(注意看倒数第2位),也就不能接收到来自局域网的广播消息。只有类似 192.168.1.* 的地址才为同一网段。

企业网络通常较为复杂,单一的网段能够容纳的设备数有限且管理不便,因此通常都会有多个网段,这使得广播可能在跨网段时,不再有效。以石磨为例,仅仅是多部门协同就有多达数十个网段满足不同部门的需要,从 10.10.*.* 到 192.168.*.* 均略有覆盖,广播的方案已不再可行。


  • 那么,组播呢? 看起来是我们想要的东西。


但最终尝试时还是发现一定问题。组播可以“跨网段向组内的成员广播”是事实,但这必须路由器支持组播协议,而该功能默认情况下是关闭的,组播数据包在到达路由器时即被静默的丢弃不再转发。且有的路由器为了简化用户界面隐藏了设置项,使得这一操作的门槛变的更高。我们不希望这一功能最终变的十分晦涩难以设置,用户根本无从下手。


为什么路由器默认抛弃组播的数据包?因为很容易想象当局域网内随意充斥着成百万上千万个组播数据包时,网络会糟糕到什么样子,同时组播是支持在 Internet 公网上公开的,这很容易给企业网带来巨大的不可控风险。换言之,你的企业网管可能不愿意打开这项功能。


最终我们退而求其次决定使用最简单的方式

鉴于上述问题的综合考量,我们最终还是决定以最容易理解和操作的方式解决内网用户的问题:

直接打包 SmobilerService 地址,但舍弃了更换 IP 无需打包的便利性。

现在,当 APP 下的 SmobilerService 处于可用状态时(试用中/永久激活),用户选择打包 >=4.8 以上内核版本的应用,就可在通用选项区域看到一个新选项 —— “SmobilerService服务器地址” 。

SmobilerService 新功能 “路由发现”


填写地址并重新打包应用后,分发给最终用户安装,并将 Smobiler 服务端托管在 SmobilerService 上,即可直接在纯内网环境下启动应用,无需再连接公网。

当然像最初提到的,这一方式的优点在于操作简单便捷,但缺点也十分明显,一旦内网地址发生改变,你就必须重新打包 SmobilerService 应用并再次分发。这是我们为解决纯内网用户的一直以来的需求而折中便利性与功能性的方案。


请确保云平台连接可用

我们目前的 SmobilerService 路由发现功能界面长这样:

SmobilerService 新功能 “路由发现”

你一定留意到了 “Smobiler 云平台可用性”。是的,你依旧需要确保 SmobilerService 能够与云平台正常连接,让它接替 APP 向云平台完成设备认证,这样路由发现个功能才可用。

当连接不再畅通时,你将看到如下界面:

SmobilerService 新功能 “路由发现”

此时,SmobilerService 无法接替设备本身向云平台发起代理认证,则路由中转功能不再可用,APP 无法在纯内网启动。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI