体验共享单车后对于Locman技术实现的几点思考html
原创
2017-02-28安全
关键点:服务器
- 共享单车体验
- 摩拜单车技术实现的思考
- ofo单车技术实现的思考
- Locman现阶段技术实现分析
- 对于Locman后期实现的一点小思考
自2015年Uber、Airbnb火热起来以后给O2O创业带了一个新的名词 共享经济
(所谓的共享经济模式就是经过一个平台化的互联网工具,把社会上具备相同属性的闲散资源整合到一块儿,以更加高效的方式知足市场的供给),在国内就出现了一大批如滴滴、易到用车、神州专车等基于共享模式号称解决人们打车难的平台出现,统治了打车这个行业,但在人们“最后一千米”出行方面仍是面临了难题。世界就是这么奇妙,哪里有需求哪里就会有解决方案,在2016年中相继出现了摩拜单车、ofo单车、小蓝单车等方便出行的“原始交通工具”,在一开始出来以后,做为屌丝的我为了避免给 29九、99
元的押金,并无想过会使用它们,然而一次出行让我不得不使用上它,后来居然喜欢上了。下面就来讲说我使用到的共享单车以及体验感觉:网络
第一次使用上宣称 触手可骑
的摩拜单车是在2017年2月6日,因为出行须要开通并使用了摩拜单车。模块化
扫码->开锁->go
短短几秒钟就完成了开锁功能,这体验感受比较方便快捷,知足了人们习惯上使用的扫码功能,也增长了蓝牙开锁功能。 第一次使用ofo单车是在2017年2月10日,骑行了摩拜单车后感受坐垫不能调节,骑行比较费力,当时也没有在周边找到摩拜单车,就开通了宣称 随时随地有车骑(ANYTIME ANYWHERE)
骑行体验比较好的ofo单车。工具
以上就是我在使用了共享单车的一些直观感觉,可是做为一个Coder我比较关注的是摩拜单车整个用车流程的体验,如下就是我参考网络大牛,以及本身的一些感觉揣测的摩拜单车开锁、关锁的技术实现(由于与如今的工做遇到的问题以及解决办法类似),若是有不合理的地方欢迎指正,联系个人邮箱。组件化
做为一个Coder,在现阶段项目中遇到不少问题,发现与摩拜单车实现技术相似,可是未作到与摩拜单车同样的体验。在体验了摩拜单车以及参考了各位网络大神对于摩拜单车通讯的讲解,也有一点本身的体会,现只对摩拜通讯记录以下(关于硬件方面如何设计及工做此处省略1000......字):优化
摩拜整个通讯中,有三个比较关键节点:url
上述图示,能够看出,这三者之间存在两两相互通讯:单车与手机终端、手机终端与服务器、单车与服务器,再这三者之间相互通讯,技术最为难实现也最重要的一环是单车与服务器之间的通讯。设计
单车与服务器通讯
从网络各位大神分享的技术博客综合(由于硬件方面不是太懂,网上有大神对摩拜的车锁进行了一个拆解),单车与服务器之间的通讯方式存在两种方式:一种是使用SIM卡经过短信方式向单车发送开锁/关锁命令,这种是不须要TCP/IP创建一个长链接的,这种方式存在一个弊端就是发送短信的寻址须要一个比较长的时间,因此在摩拜单车的第一代部分单车开锁就存在一个延迟较大、不稳定的一个状况;第二种就是经过TCP/IP建立长链接,在这里猜测使用长链接的方式主要是用在单车像服务器发送定位信息使用,毕竟摩拜是在其单车中提供了发电装置,并且在我使用单车的过程当中关闭了手机终端的网络,一样是在结束行程以后查看个人行程轨迹。
单车与手机终端通讯
在第一阶段,摩拜采用的是手机扫描二维码的方式读取单车信息,这是一个手机主动读取数据的过程,在此过程当中应该是不存在手机与单车的通讯机制的;摩拜后期新增了蓝牙开锁(也是摩拜比较推崇的一个开锁方式),毕竟低功耗蓝牙4.0在技术上已经很成熟,价格低廉,特别是耗电量低等诸多有点。本人猜想可能出于省电考虑,使用蓝牙以后单车无需实时在线(全部命令能够经过手机端连接服务器,接收并取得命令激活单车 这里只是一种猜想,可是具备可行性
),在蓝牙开启的状况下摩拜App会主动尝试链接单车蓝牙,连接成功后经过蓝牙指令读取单车信息,而后经过App的网络传输指定单车信息至服务器请求开锁。在此过程后,摩拜能够经过两种方式向单车发送开锁指令:第一种是与扫描二维码方式同样,经过服务器端直接发送开锁指令到单车;另外一种是将开锁指令下发给手机端,而后手机端经过蓝牙发送指令开锁并将单车从睡眠状态激活(我以为应该是采用的此种方式,否则摩拜也没有必要再作一个蓝牙开锁)。
手机终端与服务器端通讯
在这里就比较简单了,与咱们常见App服务器交换数据相似。在行程开始前App获取单车信息直接上传服务器请求开锁,服务器下发开锁指令(无论是二维码方式下发到单车,仍是蓝牙方式下发至App而后经过App发送开锁指令),获得单车锁已开回执后开始计费;行程结束后,服务器收到了单车的关锁信息,结束计费并向手机下发结束计费指令。
摩拜整个通讯流程
二维码方式开锁猜测
蓝牙开锁方式猜测
关于摩拜单车蓝牙开锁,在这里我的以为有两种方式:一种是与二维码相同直接向服务器请求开锁指令后,经过服务器发送指令到单车开锁;另外一种是请求成功后指令直接发送到用户手机端,此时在经过手机与单车的蓝牙发送指令开锁,我的比较倾向于第二种(否则摩拜在后阶段也不会大力推行蓝牙开锁方式,有可能还存在更多好处,暂时未分析出来),此种方式能够减小服务器与单车连接的不肯定性,增长开锁成功概率,同时经过蓝牙开启成功后,单车的锁已开状态信息能够又经过手机直接上传至服务器并同时开启计费。
相较于摩拜单车,ofo在实现开锁、关锁功能上,并无用到任何复杂的技术,虽然也存在单车、手机终端、服务器这三个关键节点。从下图图示能够看出,ofo单车也存在单车与手机终端、手机终端与服务器之间通讯,只比摩拜少了一个单车与服务器端的通讯。在ofo中单车与手机终端通讯也能够弱化,虽然存在扫码开锁,其实单车与手机终端是没有任何实质通讯。
先后已经开发过两个版本的Locman软件(存在N多个定制版本,应该在后续考虑引入模块化组件化开发):一个是Locman2.0,另外一个是现阶段的哑资源管理平台;对于这两个版本不做软件硬件实现以及工做流程不作任何评价,这里我只是谈一谈我在作了这两个版本以后的整个开锁关锁流程 (仅表明我的理解
)。
现阶段Locman与摩拜单车实现流程很是相似也是存在三个很是重要的节点+人工操做:
从上图能够看出,Locman平台开锁、关锁通讯方式与摩拜基本是一致的,也是存在:硬件设备与服务器、硬件设备与手机终端、手机终端与服务器之间的两两通讯,可是在实现上存在许多不一样(与业务场景相关),比较重要的一点是咱们的硬件设备必须手动激活,加入了应急开锁功能。
硬件设备与服务器通讯
当硬件设备手动激活后,在手机终端发送远程开启请求指令,服务器会经过两种方式:一种是SIM卡发送短信远程开锁指令;另外一种是经过GPRS发送。同理设备上报状态信息也采用以上两种方式。
硬件设备与手机终端通讯
这种通讯现阶段仅存在于光交设备。当设备人工激活后,经过手机App链接设备,链接成功以后读取设备信息并请求开锁指令,经过蓝牙向设备发送开锁指令开锁。
手机终端与服务器通讯
手机终端与服务器通讯方式比较简单:一个是服务器经过推送方式提示手机用户告警信息;另外一个是当设备手动激活后,须要经过工单中已知的设备信息(这里手机终端并未与设备通讯)向服务器请求远程开启指令。服务器并无向手机终端返回确实已开启设备的信息(由于是现场做业,并且无需其余附加操做:例如摩拜单车的计费功能,能够经过设备锁人工断定)。
Locman开锁流程
为何现阶段咱们开锁存在人工操做
这里与摩拜存在很大的区别,因为咱们的设备是须要长时间保持电量(无充电来源),因此咱们的设备并无经过TCP/IP与服务器端保持长链接,而且设备在使用后会自动进入关机状态,若是在无人工参与时设备只会固定一个周期上报状态信息。
如下问题只是我的的一些思考,如存在不合理或者不全面欢迎指正,请联系个人公司邮箱,谢谢!
Locman能够不使用激活钥匙激活设备吗?
如今蓝牙4.0技术发展已经很成熟,相较于之前老的蓝牙2.0在功耗上大大下降,从如今使用的蓝牙鼠标来看,两节5号电池雷柏蓝牙鼠标可使用大约3个半个月(亲身体验),若是是4节1号电池应该使用周期会更长(这个有待技术后期验证)。以上的说法在技术上来讲至关不严谨,这里我从网上找到了关于蓝牙4.0相关功耗文章:
蓝牙4.0低功耗技术及其认证要求,提到可使一枚纽扣电池工做长达数年;
nRF8001纽扣电池续航的超低功耗蓝牙4.0技术,讯通科技电子技术公司;
更多关于蓝牙4.0功耗问题,请进入百度文库 搜索 蓝牙4.0功耗
经过上述了解后,若是咱们设备使用蓝牙能够直接保持蓝牙在线,而且能够被搜索到(至于如何与咱们本身的App安全配对问题,须要硬件与软件共同解决),当施工人员靠近设备便可直接链接上蓝牙,此时有两种方式开锁以及上报设备状态信息:
Locman可使用二维码扫描开锁吗?
在现阶段设备开锁状况只须要读取到咱们的设备信息而且具备开锁权限的用户均可以开锁。权限已由服务器自动判断,如今主要的就是设备信息问题,咱们能够经过在设备上加入具备设备信息的二维码标签便可。后续的开锁流程:一种是就可直接参照现阶段远程开锁流程操做;另外一种是结合上一个问题已讨论的蓝牙进行开锁。
关于Locman离线开锁功能,在完成2.0版本以后就有了这个想法。在外施工的工做人员会遇到网络信号很差,这种状况应该是比较常见的,这不只仅是只包含咱们手机终端设备信号,也包括咱们硬件设备在不少时候请求了远程开锁并不可以成功的开启。
在现阶段实现流程中加入离线开锁功能是不现实的,首先咱们设备是须要手动激活,而后经过服务器发送开锁命令才可以完成开锁流程。可是若是结合上述 Locman能够不使用激活钥匙激活设备吗?
可以新增蓝牙开锁。大体流程以下:
施工人员在处于有网络状态下,下载离线设备数据,而且根据用户权限获取开锁命令(命令能够是:根据用户权限生成的一次性命令、永久命令),在用户处于网络很差的状况,经过蓝牙链接发送获取设备信息而且获得信息与离线存储口令进行匹配,匹配成功后再经过蓝牙直接发送开锁命令直接开启设备。
我以为答案是确定的,参照 Locman能够增长离线开锁功能吗?
用户能够直接选择预先下载对应设备的开锁命令(这里的命令与离线命令须要区分开来)进行预定,在用户预定以后冻结该设备(冻结时长或者其余参考因素)为其余人操做。后续操做方式与上述 Locman能够增长离线开锁功能吗?
相同。
最后这些想法是否合理还有待验证,在这里感谢个人同事邓xx(就不写全名了)对我在Locman整个开锁流程上的梳理与帮助。