初见 SmobilerService 你会发现几个版本,以及一些价格。安全
因此,“Smobiler 是要收费了吗?” 这是开发团队在幕后悄悄观察 Service 推广开始后,用户向运营团队提出的最关心的几个问题之一。服务器
在此开发团队替运营小组转达全部的 Smobiler 用户:请放心,Smobiler 此前免费的功能会一直免费下去。app
这一次发布的 SmobilerSevrice 严格意义上咱们能够简称它为 Service ,它并不涉及任何开发方面的功能。实际上,SmobilerService 是为更好的托管 Smobiler 服务端并为其赋予更强大的能力而生的。优化
虽然说尽管没有 Service 你依旧能够在服务器上用那个大大的二维码窗口,无差异的运行你用 Smobiler 开发好的服务端,但借助于 SmobilerService ,咱们但愿可以帮助你把这一切作的更好。操作系统
在长期对开发者使用习惯的观察中,咱们整理出了一些开发者一般在运营 Smobiler 应用时都会遇到的问题。而后某一天,基于这份问题清单,咱们坐下来讨论,而后决定开始构建这款 SmobilerService ,来帮助用户,知足他们在运营 Smobiler 应用过程当中的更加多样性的需求,为 Smobiler 应用的运营工做赋能。插件
下面咱们一块儿来看看,你最终看到的这些 Service 功能,都是如何诞生的。设计
1.在界面上铺满一堆大大的二维码窗口是个大问题……日志
咱们发现当用户在同一台服务器上同时运营多个 APP 时,服务器界面上会充斥着大量的二维码窗口,就像这样:server
这太让人没法接受了。远程桌面一般不是只有一名用户有权限访问的, 而正式运营的 Smobiler 服务器就这样暴露在外,随时能够被任何访问远程服务器的人(甚至是本身!)随手关掉,这实在是太危险了。blog
就算是在 Smobiler 开发团队内部,也发生过有开发者链接远程桌面进行系统维护误关闭服务端的问题,最终致使短期内大量内部员工没法正常使用 APP 的问题。
咱们但愿以一种更加优雅的方式去托管 Smobiler 应用。
因而最基础的应用托管功能诞生了。 你只需将应用以类库(.dll)的方式生成(而再也不是.exe),再提供应用所在的目录, Service 就可以帮你暗中“拉起”服务端,让它安全的在幕后运行。
这是咱们同时托管 4 个应用时,SmobilerService 所呈现的样子:
足够优雅。但这还不够,咱们作了更多。
进程守护应运而生。
咱们试图找到一种方式,来持续检查应用服务器的运行状态,若是发现进程丢失,会当即尝试再次拉起服务端,以此来保证它的正常运行,用户使用不受中断。而这也被最终实现,如今,当服务端被意外停止时,进程能够在 1 秒内被 Service 立刻恢复。
而另一个问题是,假若守护 Smobiler 服务端的 Service 自己被中断了,又该怎么办呢?幸亏,由于 Service 是以 Windows 服务的方式运行在系统中的,则 Windows 系统自己也会对它提供保护,在出现意外退出时,根据服务守护策略,由 Windows 操做系统来恢复 SmobilerService 服务。
Windows 服务恢复策略的界面以下:
因此最后成了:
Windows 服务保证 SmobilerService 运行 → 而 Service 保证 Smobiler 服务端正常运行。
这样一来,咱们得以将服务端的意外停机几率降至一个很是可观的低数值。
2.咱们发现很多用户使用 Smobiler 开发企业级内网应用
这首先给消息推送带来困难。
此前 Smobiler 应用在设备链接公网的状况下,借助集成的极光推送插件可以轻松的实现消息推送功能。但当用户将 Smobiler 应用纯粹使用于内网之中后,这个方案再也不行得通了。咱们须要一个新的思路。
因此,最后咱们干脆本身封装出了一套推送服务。
若是你有心观察,必定会在任务管理器中发现一个名为 smopush.exe 的进程。没错,咱们将它最终集成于 Service 中,实现了内网推送功能。
如今,借助于这套服务,当客户端彻底运行于内网环境时,消息推送也可以正常运行。
固然,咱们还为它略微追加了一点常见的个性化功能:
全体推送
推送给指定用户群
若是你将系统交付给并不具有开发能力的运营人员维护,则咱们为你开发了一个操做界面,这应当可以知足手动推送消息的须要:
而对于真正有开发能力的开发者,也许直接进行界面操做不是你想要的(毕竟这样效率过低了),咱们直接向你开放了一个简洁的口子,你能够经过引用类库并调用指定的方法来实现代码级的消息推送,让一切自动化:
而后根据方法签名提供参数便可。
一个简单的示例以下:
int appId = 163;
int pushServicePort = 1883;
PushClient mPush = new PushClient("127.0.0.1", appId, pushServicePort);
if (mPush.IsConnected == false)
{
mPush.Connect();
}
string title = "消息标题";
string content = "这里是推送消息的内容";
//使用此行代码推送全体消息:
MessageResult result = mPush.PushAll(title, content);
//或使用此行代码推送部分用户(与上一行代码二选一)
MessageResult result = mPush.Push(title, content, new List<string>(){"DeviceID1","DeviceID2","DeviceID3","DeviceID4"});
固然,做为开发者日志咱们最想表达的仍是设计思想和功能由来的故事,并但愿借此可以与最终用户讨论沟通,以改善产品给你带来更好的使用体验。有关如何使用的细节和代码问题,你还须要查阅文档,或向官方技术支持团队寻求帮助。
3.用户并不但愿本身的某些企业级应用被随意传播和使用
就像上面提到过的,有很多开发者使用 Smobiler 开发的最终产品,是企业级应用。
这意味这它会有特定的使用场景和用户群体,而并不是像面向最终我的消费者的 APP 那样,装机量越多越好。
有时,咱们只但愿部分用户安装咱们的应用,而对非法访问的用户直接踢出,或者永久禁止访问。再干脆一点,甚至直接限定设备范围,使得此应用只可以被固定的几台设备访问。
客户端管理、黑白名单功能正是咱们针对这类问题所给出的答案。
你能够直接查看当前链接的全部设备,将未经受权但闯入的非法设备当即踢出,使其失去与服务器的链接(经过点击设备后红色的Kill):
也能够配置黑白名单模式,并启用一种策略类型来永久的阻止或开放一部分用户访问应用的权限:
以上两种方式,在目前看来都足以应对 APP 使用权限和范围受权的管理需求。
4.“每次一出问题都要到一线作技术支持,太累了……”
Smobiler 部分开发者作出的应用,是运行在仓储或者是物流行业当中的。
运行在这样的环境也意味着当一线员工持枪扫描或者进行其余操做遇到问题时,开发者是颇有可能被立刻“召唤”到现场去作技术支持的,而仓库和物流场地实在是...太大了。
当开发人员赶赴一线,观察员工操做后,三下五除二就搞定了问题,让工做得以继续进行。
因此是否是能够坐在位置上就解决这个问题呢。开发人员须要的,仅仅是看到一个流畅的“远程画面”,进而重现故障或指导操做而已。
是否是能够尝试作出一个 APP 远程监控来提高解决问题的效率,减小往复时间呢。为何不呢?
远程监控正是为此而生。
经过在设备列表内点击 Monitor 按钮,便可实现 APP 远程画面监控:
由此咱们能够帮助开发者最大限度的提高效率,在最少的时间内,解决最多的问题。这也是咱们认为在 SmobilerService 第一版中,最为激动人心的一个功能,但愿它可以真的,为你带来可见的价值和明显的效率提高。
好了,以上就是 SmobilerService 产品故事的开始,它到底如何起步,以及为何咱们决定先作出这些功能,相信都有了一个很好的概述。
===================分割线===================
结束语
日后,SmobilerService 会有更多新奇的功能被不断加入,咱们亦会继续更新 SmobilerService 开发者日志,以期可以在功能最终发布前与你充分接触,探讨设计构思的合理性、并优化最终产品模块的使用方式与操做体验,直至功能最终与你正式见面( 或是某些缘由中途决定放弃咱们也会尽量的告诉你缘由 :-) )。
固然,开发团队仅能经过开发者日志来与各位最终用户进行设计思路和功能实现上的沟通和交流,并在这其中改善产品,提高使用体验,使其更符合最终用户的需求,实实在在知足你对产品运营的需求,并帮助开发者在应用运营与管理上作的更好。而最终发布时具体哪一项功能划入哪个销售版本中、订价多少,开发团队不会去关心也无权干涉,这一切仍是基于石磨发展角度由专业的决策团队去作考虑,有这方面的问题,还请多多关注运营推广的相关信息~
更多问题欢迎回帖讨论,开发团队将会选取有价值的回复共同探讨。而你的一个想法,也有可能会最终影响 SmobilerService 某个功能模块的开发方向,由于开发团队确实可以真切的听到你的声音。
也欢迎加入石磨官方开发者讨论 QQ 群:308522976 继续探讨。
你的意见,很是重要!