发明内容
本申请实施例的目的在于提供一种云通信方法及系统,以减少车载通信终端响应用户终端指令的时长。具体技术方案如下:
本申请实施例的第一方面,提供了一种云通信方法,应用于云设备,所述方法包括:
接收用户终端发送的长连接请求,响应于所述长连接请求,与所述用户终端建立长连接,所述长连接请求为所述用户终端在识别到用户打开车控画面时向所述云设备发送的请求;
基于所述长连接接收所述用户终端发送的登入报文,所述登入报文包括所述用户终端的登录账户标识和车载通信终端的标识;
对所述用户终端的登录账户标识和所述车载通信终端的标识进行校验;
在校验通过时,若确定所述车载通信终端处于休眠状态,则唤醒所述车载通信终端。
可选的,在所述对所述用户终端的登录账户标识和所述车载通信终端的标识进行校验之后,所述方法还包括:
在校验通过时,通过所述长连接向所述用户终端发送登入响应报文,所述登入响应报文用于表示所述用户终端成功登入所述云设备;
通过所述长连接接收所述用户终端发送的心跳报文;
若持续第一时长未接收到心跳报文,则断开所述长连接,并向所述车载通信终端发送休眠指令。
可选的,在所述对所述用户终端的登录账户标识和所述车载通信终端的标识进行校验之后,所述方法还包括:
在所述长连接未断开且所述车载通信设备处于工作状态的情况下,周期性地向所述车载通信设备发送状态通知报文,所述状态通知报文用于表示所述用户终端在线,以使得所述车载通信终端在接收到状态通知报文后保持第二时长的工作状态;
在所述长连接未断开且所述车载通信终端处于休眠状态的情况下,再次唤醒所述车载通信终端。
可选的,在所述再次唤醒所述车载通信终端之前,还包括:
判断唤醒所述车载通信终端的次数是否达到预设次数;
若唤醒所述车载通信终端的次数达到所述预设次数,则向所述用户终端发送唤醒失败通知报文,并断开所述长连接;
若唤醒所述车载通信终端的次数未达到所述预设次数,则执行所述再次唤醒所述车载通信终端的步骤。
可选的,在所述与所述用户终端建立长连接之后,所述方法还包括:
将所述长连接标识与所述车载通信终端的标识对应存储在数据库中;
在所述通过所述长连接接收所述用户终端发送的心跳报文之后,所述方法还包括:
基于所述数据库中存储的长连接标识与车载通信终端的标识之间的对应关系,对接收心跳报文的长连接的标识以及心跳报文携带的车载通信终端的标识进行校验;
若校验不通过,则丢弃接收到的心跳报文。
可选的,所述方法还包括:
通过所述长连接接收所述用户终端发送的登出报文,所述登出报文为所述用户终端在识别到用户关闭所述车控画面时发送的报文;
响应于所述登出报文,断开所述长连接,并向所述车载通信终端发送休眠指令。
本申请实施例的第二方面,提供了一种云通信方法,应用于用户终端,所述方法包括:
在识别到用户打开车控画面时向云设备发送长连接请求,以使得所述云设备响应于长连接请求与所述用户终端建立长连接;
在确定成功建立所述长连接时,基于所述长连接向所述云设备发送登入报文,所述登入报文包括所述用户终端的登录账户标识和车载通信终端的标识,以使得所述云设备对所述用户终端的登录账户标识和所述车载通信终端的标识进行校验,并在校验通过时,若确定所述车载通信终端处于休眠状态,则唤醒所述车载通信终端。
可选的,在所述基于所述长连接向所述云设备发送登入报文之后,所述方法还包括:
接收所述云设备发送的登入响应报文,所述登入响应报文为所述云设备在校验通过时发送的、用于表示所述用户终端成功登入所述云设备的报文;
在所述用户终端显示所述车控画面的情况下,周期性地通过所述长连接向所述云设备发送心跳报文;
若经过第三时长未接收到所述云设备响应于心跳报文发送的心跳响应报文,则断开所述长连接,并重新向所述云设备发送长连接请求。
本申请实施例的第三方面,提供了一种云通信系统,所述系统包括:用户终端、云设备和车载通信终端;其中,
所述用户终端,用于执行第二方面任一项所述的云通信方法步骤;
所述云设备,用于执行第一方面任一项所述的云通信方法步骤;
所述车载通信终端,用于在所述云设备唤醒所述车载通信终端时,将自身状态切换至工作状态。
可选的,所述车载通信终端,还用于:
在所述将自身状态切换至工作状态之后,接收所述云设备发送的状态通知报文,保持第二时长的工作状态,所述状态通知报文用于表示所述用户终端在线;
若持续所述第二时长未接收到状态通知报文,则将自身状态切换至休眠状态。
在本申请实施的第四方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述任一所述的云通信方法步骤。
在本申请实施的第五方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的云通信方法。
在本申请实施的第六方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的云通信方法。
本申请实施例有益效果:
本申请实施例提供的云通信方法及系统,云设备可以在用户打开车控画面后,对用户终端与车载通信终端进行校验,并在校验通过且车载通信终端处于休眠状态时,唤醒车载通信终端。由于用户可以通过车控画面控制车载通信终端,因此用户打开车控画面时还没有控制车载通信终端,即本申请实施例可以在用户可能要控制车载通信终端但还未控制车载通信终端时,提前唤醒车载通信终端,使得后续用户通过车控画面控制车载通信终端时不用唤醒车载通信终端,因此减少了车载通信终端响应用户终端指令的时长。
当然,实施本发明的任一产品或方法并不一定需要同时达到以上所述的所有优点。
具体实施方式
下面将结合本申请实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员基于本申请所获得的所有其他实施例,都属于本发明保护的范围。
为了减少车载通信终端响应用户终端指令的时长,提高用户通过用户终端对车载通信终端进行远程操控的体验,本申请实施例提供了一种云通信系统,如图1所示,该系统包括:用户终端101、云设备102和车载通信终端103。
其中,用户终端101可以是手机、平板电脑或者计算机等具备数据处理能力的设备。用户终端101中安装有汽车应用程序(application,APP),汽车APP内包括车控画面,汽车APP作为客户端与云设备102对应,用户终端101可以在车控画面内接收用户对车载通信终端103发出的指令,并通过云设备102向车载通信终端103转发指令。此外,用户终端101安装的汽车APP内还可以包括其他画面,例如商城画面和论坛画面等,本申请实施例对此不作具体限定。
云设备102可以是云服务器,云服务器也可称为汽车远程服务提供商(TelematicsService Provider,TSP)。
车载通信终端103可以是汽车中安装的远程信息处理器(Telematics BOX,Tbox),Tbox内配置有用户身份识别卡(Subscriber Identity Module,SIM),能够基于因特网(Internet)连接到云设备102。
图1所示的云通信系统中各设备数量仅为一种示例,本申请实施例提供的云通信系统中各设备的数量不限于此。
结合图1,本申请实施例提供了一种云通信方法,该方法应用于图1所示的云通信系统中的云设备,如图2所示,该方法包括如下步骤:
S201、接收用户终端发送的长连接请求,响应于长连接请求,与用户终端建立长连接。
其中,长连接请求为用户终端在识别到用户打开车控画面时向云设备发送的请求,车控画面为为用户提供控制车载通信终端的画面,即用户可以通过车控画面控制车载通信终端。
其中,长连接的特点是用户终端与云设备之间建立的连接不会因为任务结束而关闭,例如,长连接不会因为用户终端向云设备发送指令结束而关闭,用户终端后续发送其他指令时仍然会使用该长连接。用户终端与云设备之间建立的长连接可以是传输控制协议(Transmission Control Protocol,TCP)连接,或者也可以是其他连接,例如用户数据报协议(User Datagram Protocol,UDP)连接等,本申请实施例对此不作具体限定。
相关技术中,用户终端在接收到用户对车载通信终端发出指令时,与云设备建立短连接,通过短连接向云设备发出指令,并在指令发出后断开短连接。本申请实施例在用户终端与云设备之间建立长连接,用户终端不用每次向云设备发送报文都重新与云设备建立连接,减少了用户终端控制车载通信终端过程中与云设备建立连接造成的中央处理器(central processing unit,CPU)和内存占用,同时减少了用户终端向云设备发出的连接请求造成的网络堵塞。
一种实现方式中,用户终端可以在用户打开汽车APP后,当检测到用户点击打开车控画面时,进入车控画面并向云设备发送长连接请求。
S202、基于长连接接收用户终端发送的登入报文。
其中,登入报文为用户终端确定成功建立长连接后向云设备发送的报文,登入报文包括用户终端的登录账户标识和车载通信终端的标识。
S203、对用户终端的登录账户标识和车载通信终端的标识进行校验。
登录账户标识可以是用户身份证明(User Identification,UID),车载通信终端的标识可以是车辆识别号码(Vehicle Identification Number,VIN)或者设备ID(deviceId)等。
一种实现方式中,云设备中存储有登录账户标识与车载通信终端的标识之间的预设对应关系,每个登录账户标识可以对应多个车载通信终端的标识,每个车载通信终端的标识也可以对应多个登录账户标识。该对应关系可以预先配置在云设备中,或者云设备也可以在用户利用汽车APP注册账户后,将注册信息中包括的登录账户标识和车载通信终端的标识对应存储。基于此,云设备在执行S203时,可以校验本地存储的对应关系中,是否存在登入报文中的登录账户标识和车载通信终端的标识之间的对应关系,若存在则校验通过,否则校验不通过。
S204、在校验通过时,若确定车载通信终端处于休眠状态,则唤醒车载通信终端。
一种实现方式中,云设备可以模拟影子服务封装一个短信报文,并通过短信息服务(Short Message Service,SMS)向车辆发送唤醒指令。车辆的短信接收模块接收到唤醒指令后,唤醒车辆中的车载通信终端。车载通信终端唤醒后,与云设备建立消息队列遥测传输(Message Queuing Telemetry Transport,MQTT)连接,并执行上电操作唤醒车载的控制器局域网络(Controller Area Network,CAN),通过CAN网络与车辆中各个电子控制单元(Electronic Control Unit,ECU)进行交互。车辆中的每个ECU能够控制车辆中的物理模块,例如,控制车窗的升降、车载空调的开关和温度、车载天窗的开关等。
可选的,云设备在校验不通过时,可以断开与用户终端之间建立的长连接。
本申请实施例提供的云通信方法,云设备可以在用户打开车控画面后,对用户终端与车载通信终端进行校验,并在校验通过且车载通信终端处于休眠状态时,唤醒车载通信终端。由于用户可以通过车控画面控制车载通信终端,因此用户打开车控画面时还没有控制车载通信终端,即本申请实施例可以在用户可能要控制车载通信终端但还未控制车载通信终端时,提前唤醒车载通信终端,使得后续用户通过车控画面控制车载通信终端时不用唤醒车载通信终端,因此减少了车载通信终端响应用户终端指令的时长。
本申请的一个实施例中,提供了一种用户终端与云设备的心跳保活机制,云设备可以通过用户终端的心跳持续感知用户终端的在线情况。基于此,在上述S203之后,如图3所示,云设备还可以执行如下步骤:
S205、在校验通过时,通过长连接向用户终端发送登入响应报文。其中,登入响应报文用于表示用户终端成功登入云设备。
可选的,用户终端可以在发出登入报文后的一段时间内未接收到登入响应报文时,确定登入云设备失败,断开与云设备之间的长连接,然后返回S201以重新向云设备发送长连接请求。例如,该一段时间可以是10秒(second,s)。
S206、通过长连接接收用户终端发送的心跳报文。其中,心跳报文用于表示用户终端在线。
一种实现方式中,用户终端在接收到登入响应报文后,在显示车控画面的情况下,周期性地向云设备发送心跳报文(例如每30s发送一次心跳报文),以向云设备报告用户终端的在线情况。云设备在接收到心跳报文后,还可以响应于心跳报文向用户终端返回心跳响应报文,用户终端若发送心跳报文后的一段时间内未接收到心跳响应报文,则断开长连接,并返回S201以重新向云设备发送长连接请求。例如,该一段时间可以是10s。用户终端在发送心跳报文后10s内没接收到云设备发送的心跳响应报文,可能是由于云设备与用户终端之间的网络故障(例如长连接异常断开)等。
可选的,由于云设备唤醒车载通信终端的过程消耗的时间较长,为保证车载通信终端能够及时响应用户终端发出的指令,可以设置用户终端发送心跳报文的时间间隔不小于唤醒车载通信终端的耗时。
S207、若持续第一时长未接收到心跳报文,则断开长连接,并向车载通信终端发送休眠指令。
由于用户终端退出车控画面、关闭汽车APP、汽车APP进程被杀、将汽车APP切换到后台运行、用户终端与云设备之间的网络故障等情况下,云设备均无法接收到心跳报文,此时云设备可以在持续第一时长未接收到心跳报文时,确定用户终端不在线。第一时长可以根据实际需要进行预先设置,例如,第一时长可以是1分钟。
需要说明的是,上述S204与S205-S207可以先后执行,也可以并行执行,图3以S205-S207在S204之后执行为例进行说明,本申请实施例对二者的执行顺序不作具体限定。
采用上述方法,云设备可以通过心跳报文持续感知用户终端是否停留在汽车APP的车控画面,以持续等待用户终端对车载通信终端发出的指令。并在感知到用户终端不在线时,及时控制车载通信终端休眠,减少车载通信终端因保持工作状态而消耗的资源。
在本申请的一个实施例中,云设备可以根据用户终端的在线情况,持续控制车载通信终端维持工作状态。基于此,如图4所示,云设备在S203进行校验之后,还可以执行以下步骤:
S208、在长连接未断开且车载通信设备处于工作状态的情况下,周期性地向车载通信设备发送状态通知报文,以使得车载通信终端在接收到状态通知报文后保持第二时长的工作状态。其中,状态通知报文用于表示用户终端在线。示例性的,第二时长为60s。
云设备可以基于车载通信终端的VIN,通过设备状态服务监听并获取车载通信终端的状态,并将车载通信终端的状态存储在远程字典服务(Remote Dictionary Server,Redis)中。
一种实现方式中,云设备可以通过心跳报文检测长连接是否断开,即当云设备接收到心跳报文时,说明用户终端在线即长连接未断开。在用户终端在线的情况下,云设备可以检查Redis并确定车载通信终端在线时,每间隔60s向车载通信终端发送一次状态通知报文,或者每接收到两个心跳报文向车载通信终端发送一次状态通知报文,本申请实施例对周期性发送状态通知报文的方式不作具体限定。
S209、在长连接未断开且车载通信终端处于休眠状态的情况下,再次唤醒车载通信终端。
一种实现方式中,在再次唤醒车载通信终端之前,云服务器还可以判断唤醒车载通信终端的次数是否达到预设次数。若唤醒车载通信终端的次数达到预设次数,则向用户终端发送唤醒失败通知报文,并断开长连接;若唤醒车载通信终端的次数未达到预设次数,则执行再次唤醒车载通信终端的步骤。
例如预设次数为3次。本申请实施例中,云设备在S204唤醒车载通信终端时,如果未唤醒成功,则在接收到用户终端的心跳报文后,还可以再次唤醒车载通信终端,并在尝试预设次数后仍无法唤醒车载通信终端时,说明车载通信终端目前无法唤醒,此时用户终端不能控制车载通信终端,因此需要告知用户终端无法唤醒并断开长连接。
在另一种可能的实现方式中,在S204执行过唤醒车载通信终端的步骤后,如果长连接未断开且车载通信终端仍处于休眠状态的情况下,云设备可以直接向用户终端发送唤醒失败通知报文,并断开长连接。
采用上述方法,云设备可以在用户终端显示车控画面时,控制车载通信终端维持工作状态,保证在用户终端通过车控画面接收并发送指令时,车载通信终端处于工作状态,从而及时响应指令。
在本申请实施例中,车载通信终端的电源模式包括:关闭(OFF)、睡眠(sleep)、准备(standby)和正常(normal)。
基于此,云设备还可以获取车载通信终端的电源模式,云设备可以在电源模型为normal且车载通信终端处于工作状态时,向车载通信设备发送状态通知报文,否则需要唤醒车载通信终端。
本申请的一个实施例中,上述S201云设备与用户终端建立长连接之后,云设备还可以将长连接标识与车载通信终端的标识对应存储在数据库中。例如,数据库可以是Redis。
基于此,在S206中云设备通过长连接接收用户终端发送的心跳报文之后,云设备还可以基于数据库中存储的长连接标识与车载通信终端的标识之间的对应关系,对接收心跳报文的长连接的标识以及心跳报文携带的车载通信终端的标识进行校验;若校验不通过,则丢弃接收到的心跳报文。
一种实现方式中,云设备可以检查Redis中存储的对应关系中,是否存在接收心跳报文的长连接的标识与心跳报文携带的车载通信终端的标识的对应关系。若存在则校验通过,否则校验不通过。
采用上述方法,云设备可以对心跳报文进行安全校验,避免恶意用户终端对于车载通信终端的干扰,提高了用户终端与云设备之间的通信安全性。
在本申请的一个实施例中,用户终端还可以主动控制车载通信终端休眠。此时,云设备还可以通过长连接接收用户终端发送的登出报文,然后响应于登出报文,断开长连接,并向车载通信终端发送休眠指令。
其中,登出报文为用户终端在识别到用户关闭车控画面时发送的报文。例如,用户终端可以在退出车控画面、退出当前登录账户、汽车APP切换至后台运行或者汽车APP进程被杀等情况下,向云设备发送登出报文。
一种实现方式中,休眠指令包括两类,一类可以使得车载通信终端快速进入休眠状态并断开与云设备之间的MQTT连接;另一类可以使得车载通信终端完成用户终端的指令后进入休眠状态并断开与云设备之间的MQTT连接。云设备发送的休眠指令类型可以根据实际需要设置,本申请实施例对此不作具体限定。
可选的,云设备还可以响应于登出报文,基于长连接向用户终端发送登出响应报文,然后再断开长连接,以及时通知用户终端长连接断开。
采用上述方法,本申请实施例中的用户终端可以主动控制车载通信终端休眠,以减少车载通信终端由于等待用户终端的控制而保持工作状态所消耗的资源。
可选的,云设备还可以基于Redis中存储的对应关系,对接收到的登出报文进行安全校验,校验方式与对心跳报文的校验方式相同,此处不再赘述。此外云设备还可以基于Redis中存储的对应关系对用户终端发送的其他报文进行安全校验,例如其他报文可以是登入报文以及用户终端控制车载通信终端所基于的指令报文。
可选的,云设备还可以在检测到与用户终端之间的长连接断开后,清除Redis中存储的该长连接的标识与车载通信终端的标识之间的对应关系,避免在Redis中存储无效的对应关系。
图5中APP表示用户终端,TSP表示云设备,TCAM表示车载通信终端,即TBOX。如图5所示,在本申请实施例提供的云通信方法中,APP通过长连接请求与TSP建立长连接,并通过登入报文请求登入云设备。TSP包括编码器和解码器,TSP能够利用解码器对来自于APP的数据(例如APP发送的针对TCAM的指令)和来自TCAM的数据(例如TCAM的状态)进行数据解析。同时,TSP还能够利用编码器对需要发送的数据进行编码,并向APP或者TSP发送编码后的数据。
TSP确定APP成功登入后,检查TCAM状态,并在TCAM处于休眠状态时,通过短信网关(即SMS)向TCAM发送RWR(即唤醒指令),以唤醒TCAM。
APP在成功登入TSP后,周期性地向TSP发送心跳报文。TSP根据在持续第一时长未接收到心跳报文时,确定心跳丢失;否则确定心跳保持。在心跳保持且TCAM处于工作状态时,通过MQTT连接向TCAM发送状态通知报文。
图6中APP表示用户终端,TSP表示云设备,TCAM表示车载通信终端。参见图6,以下通过数据流向图对本申请实施例提供的云通信方法的整体过程进行说明:
APP与TSP建立长连接后,向TSP发送登入报文,TSP利用登入报文进行校验,如果校验不通过,则向APP发送表示校验不通过的响应报文,并断开长连接。在校验通过时,如果TCAM处于休眠状态,则通过短信网关发送唤醒指令,以唤醒TCAM。
APP成功登入TSP后,周期性地向TSP发送心跳报文,TSP基于心跳报文确定与APP之间的长连接状态。具体的,TSP持续第一时长未接收到心跳报文,则确定长连接断开,否则确定长连接保持。在长连接保持的情况下,如果检测到TCAM处于休眠状态,则通过短信网关发送唤醒指令,以唤醒TCAM;如果检测到TCAM处于工作状态,则通过MQTT连接周期性地向TCAM发送状态通知报文,以控制TCAM保持工作状态。
在确定长连接断开或者接收到APP发送的登出报文时,不继续向TCAM发送状态通知报文,或者向TCAM发送休眠指令。
以下对本申请实施例中用户终端和云设备之间的通信协议进行说明:
1. 用户终端和云设备之间传输层协议可以采用传输控制协议/网际协议(Transmission Control Protocol/Internet Protocol,TCP/IP),或者也可以采用其他协议,例如UDP协议。
2. 对于应用层协议约定:
用户终端通过TCP长连接与云设备进行数据传输。
用户终端和云设备之间传输的报文均采用8位元(Unicode TransformationFormat-8,UTF-8)编码格式。
用户终端和云设备之间传输的报文的单个数据包大小不超过64K(64*1024)字节。
用户终端和云设备之间传输的报文可以加密,加密方式不限。
如表一所示,用户终端与云设备之间传输的报文的结构包括:消息头(header)、消息体(body)、校验码(Cyclic Redundancy Check,CRC)和尾标识符。例如,尾标识符为\r\n。
表一
其中,消息体的具体格式如表二所示,表二中各元素以及CRC的说明如表三所示:
表二
magic |
version |
codec |
command |
sequence |
biz |
msgLength |
data |
表三
序号 |
元素 |
中文名称 |
说明 |
1 |
magic |
协议的魔数 |
占1个字节,默认值为99 |
2 |
version |
协议版本号 |
占1个字节,默认值为1 |
3 |
codec |
反序列化方法 |
占1个字节,为1时表示json,为2时表示protocol buff,默认为json |
4 |
command |
报文类型 |
占1个字节,为1时表示auth(登入),为2时表示登出,为3时表示ack(确认), 为4时表示command(指令),为5时表示heart(心跳) |
5 |
sequence |
消息Id |
占4个字节,数据类型为Long类型 |
6 |
biz |
业务区分 |
占1个字节,为1时表示用户终端为手机 |
7 |
msgLength |
报文长度 |
占4个字节,消息体的长度 |
8 |
data |
消息 |
消息内容 |
9 |
crc |
CRC验证 |
占4个字节,使用Crc32方式,校验元素1~8 |
用户终端与云设备之间的消息体采用单行JS对象简谱(JavaScript ObjectNotation,JSON)格式,同时尽量避免出现空格。
云设备向用户终端发送命令后,如果10s内未接收到用户终端的响应,则确定应答超时。
报文中的数据分为数值型和字符型两种,value键值表示数值型,strvalue键值表示字符型。
用户终端向云设备发送的登入报文中,command=1,且登入报文中包括{“vin”:“xxxxxx”, “userId”: 12,“situation”: “xxxx”},表示登入报文所针对的车载通信终端的标识为xxxxxx,发出登入报文的用户终端的登录账户标识为12,同时该用户终端的状态为xxxx。其中用户终端状态也可以为默认值,云设备在验证时刻不考虑用户终端状态。
云设备向用户终端发送的登入响应报文中,Command=3,且登入响应报文中包括{"sequence":708331608649760768, "code":0,"message":n, "timestamp":y },表示该登入响应报文的消息ID为708331608649760768,暗码为0,信息为n,时间戳为y。其中,信息为预留位,可填充默认值。时间戳表示云设备接收到登入报文的时间戳,用户终端能够基于登入响应报文包括的时间戳和发出登入报文的时刻,校准本地时间。
用户终端向云设备发送的登出报文中,command=2,且登出报文中包括{"vin”:xxxxxx”,"userId”: 12},表示登出报文所针对的车载通信终端的标识为xxxxxx,发出登入报文的用户终端的登录账户标识为12。
云设备向用户终端发送的登出响应报文中,Command=3,且登出响应报文包括{"sequence":708331608649,code":0,"message":null,"timestamp":yy},表示该登出响应报文的消息ID为708331608649,暗码为0,信息为无,时间戳为yy,时间戳表示云设备接收到登出报文的时间戳。
其中,暗码为0时,表示成功;暗码为1001时,表示登入验证失败;暗码为1002时,表示CRC校验失败;暗码为1003时,表示数据包解码(packet decode)失败。
用户终端向云设备发送的心跳报文中,Command=5,且报文的消息体为空。
云设备向用户终端发送的心跳响应报文中,Command=3,且心跳响应报文包括{"sequence":70833,code":0,"message":null,"timestamp":yyy},表示该心跳响应报文的消息ID为70833,暗码为0,信息为无,时间戳为yyy,时间戳表示云设备接收到心跳报文的时间戳。
云设备向用户终端发送的唤醒失败通知报文中,Command=4,且唤醒失败通知报文中包括{“vin”: “xxxxxx”,“message”: “车辆唤醒失败”},表示唤醒失败通知报文针对的车载通信终端为xxxxxx,信息为车辆唤醒失败。
MQTT通道传输的下行报文(云设备向车载通信终端发送的报文)中包括:TOPIC:{version}/WUP/TEM和内容:{message}。其中,TOPIC表示报文头部,WUP为wake uppooling,即表示云设备;TEM表示车载通信终端。
MQTT通道传输的上行报文(车载通信终端向云设备发送的报文)中包括:TOPIC:{version}/TEM/WUP和内容:{message}。
云设备发送的短信报文中包括:{version}WUP{message}。
内容即{message}共包括6个字节,其中第1个字节用于表示报文的序列号,可以在0-255范围内自增。第2-5个字节用于表示报文生成时间的时间戳,第6个字节表示报文内容。
云设备通过短信网关向车载通信终端发送的唤醒指令中{message}的第6个字节=1,表示唤醒(wake up)。
云设备通过MQTT连接向云设备发送的一类休眠指令中{message}的第6个字节=2,表示待机(standby)。
云设备通过MQTT连接向云设备发送的状态通知报文中{message}的第6个字节=3,表示维持(ping)。
云设备通过MQTT连接向云设备发送的另一类休眠指令中{message}的第6个字节=4,表示立即断开MQTT连接。
本申请实施例中,通过设置专用的TOPIC表示云设备与车载通信终端之间传输的报文,这些报文不需要解析车辆说明部分(Vehicle Descriptive Section,VDS)内容,提高了解析效率。且云设备与车载通信终端的通信不经过影子服务,缩短了传输链路,且兼容性强,可应用于各种通信协议。
结合图1,本申请实施例还提供一种云通信方法,应用于图1中的用户终端,如图7所示,该方法包括如下步骤:
S701、在识别到用户打开车控画面时向云设备发送长连接请求,以使得云设备响应于长连接请求与用户终端建立长连接。
其中,车控画面为为用户提供控制车载通信终端的画面,即用户可以通过车控画面控制车载通信终端。
S702、在确定成功建立长连接时,基于长连接向云设备发送登入报文,以使得云设备对用户终端的登录账户标识和车载通信终端的标识进行校验,并在校验通过时,若确定车载通信终端处于休眠状态,则唤醒车载通信终端。其中,登入报文包括用户终端的登录账户标识和车载通信终端的标识。
本申请实施例提供的云通信方法,云设备可以在用户打开车控画面后,对用户终端与车载通信终端进行校验,并在校验通过且车载通信终端处于休眠状态时,唤醒车载通信终端。由于用户可以通过车控画面控制车载通信终端,因此用户打开车控画面时还没有控制车载通信终端,即本申请实施例可以在用户可能要控制车载通信终端但还未控制车载通信终端时,提前唤醒车载通信终端,使得后续用户通过车控画面控制车载通信终端时不用唤醒车载通信终端,因此减少了车载通信终端响应用户终端指令的时长。
本申请的一个实施例中,用户终端可以检测长连接状态,如图8所示,在上述S702之后,用户终端还可以执行如下步骤:
S703、接收云设备发送的登入响应报文。
其中,登入响应报文为云设备在校验通过时发送的、用于表示用户终端成功登入云设备的报文。
S704、在用户终端显示车控画面的情况下,周期性地通过长连接向云设备发送心跳报文。其中,心跳报文用于表示用户终端在线。
一种实现方式中,用户终端可以在当前显示车控画面,且与云设备之间的长连接未断开时,每间隔30s通过长连接向云设备发送一次心跳报文,直至用户终端识别到用户关闭车控画面,或者检测到长连接断开时,停止发送心跳报文。其中,发送心跳报文的周期不限于30s,例如,可以每间隔20s发送一次心跳报文,本申请实施例对此不作具体限定。
S705、若经过第三时长未接收到云设备响应于心跳报文发送的心跳响应报文,则断开长连接,并重新向云设备发送长连接请求。
可以理解的,用户终端如果在发送心跳报文后的第三时长内未接收到心跳响应报文,说明云设备与用户终端之间的通信链路可能存在故障,此时需要重新建立与云设备之间的长连接。并在长连接建立成功后执行S702。
采用上述方法,用户终端可以检测长连接状态,并在长连接可能发生故障时,及时重新建立长连接,提高用户终端与云设备之间的通信效率。
本申请实施例中,应用于用户终端的云通信方法与应用于云设备的云通信方法中,相同步骤的描述可相互参照。
结合图1,本申请实施例提供了一种云通信系统,该系统包括:用户终端101、云设备102和车载通信终端103;其中,
用户终端101,用于上述方法实施例中由用户终端执行的云通信方法。
云设备102,用于上述方法实施例中由云设备执行的云通信方法。
车载通信终端103,用于在云设备唤醒车载通信终端时,将自身状态切换至工作状态。
本申请实施例提供的云通信系统,云设备可以在用户打开车控画面后,对用户终端与车载通信终端进行校验,并在校验通过且车载通信终端处于休眠状态时,唤醒车载通信终端。由于用户可以通过车控画面控制车载通信终端,因此用户打开车控画面时还没有控制车载通信终端,即本申请实施例可以在用户可能要控制车载通信终端但还未控制车载通信终端时,提前唤醒车载通信终端,使得后续用户通过车控画面控制车载通信终端时不用唤醒车载通信终端,因此减少了车载通信终端响应用户终端指令的时长。
在本申请的一个实施例中,车载通信终端还用于:在将自身状态切换至工作状态之后,接收云设备发送的状态通知报文,保持第二时长的工作状态,其中状态通知报文用于表示用户终端在线。若持续第二时长未接收到状态通知报文,则将自身状态切换至休眠状态。
示例性的,第二时长为60s。
其中,车载通信终端还用于在将自身状态切换至工作状态之后,与云设备建立MQTT连接。基于此,车载通信终端具体用于:基于MQTT连接接收云设备发送的状态通知报文。
同时,车载通信终端还用于在持续第二时长未接收到状态通知报文时,断开MQTT连接。
采用上述方法,车载通信终端可以在一段时间未接收到状态通知报文后,主动进入休眠状态,避免用户终端不在线时,车载通信终端持续保持工作状态造成的资源浪费。
参见图9,以下利用APP表示用户终端、利用TSP表示云设备、利用TCAM表示车载通信终端,并通过信令图对本申请实施例提供的云通信方法的整体过程进行说明:
S901、APP检测到用户打开车控画面时,向TSP发送长连接请求。
S902、TSP接收到长连接请求后,响应于长连接请求与APP建立长连接。
S903、APP检测到成功建立长连接后,基于长连接向TSP发送登入报文。
S904、TSP接收到登入报文后,对登入报文包括的APP的登录账户标识和TCAM的标识进行校验。
S905、TSP在校验通过时,如果TCAM处于休眠状态,则唤醒TCAM,并基于长连接向APP发送登入响应报文。
S906、APP接收到登入响应报文后,基于长连接周期性地向TSP发送心跳报文。
S907、TSP在长连接未断开且TCAM处于休眠状态的情况下,判断唤醒TCAM的次数是否达到预设次数。若是,则执行S908;若否,则执行S909。
S908、TSP向APP发送唤醒失败通知报文,并断开长连接。
S909、TSP再次唤醒TCAM。
S910、TSP如果持续第一时长未接收到心跳报文,则断开长连接,并向TCAM发送休眠指令。
S911、TSP在长连接未断开且TCAM处于工作状态的情况下,周期性地向TCAM发送状态通知报文。
S912、TCAM接收到状态通知报文后,保持第二时长的工作状态。
S913、TCAM若在持续第二时长未接收到状态通知报文,则将自身状态切换至休眠状态。
S914、APP在识别到用户关闭车控画面时,向TSP发送登出报文。
S915、TSP接收到登出报文后,断开长连接,并向TCAM发送休眠指令。
S916、TCAM接收到休眠指令后,将自身状态切换至休眠状态。
本申请实施例还提供了一种电子设备,如图10所示,包括处理器1001、通信接口1002、存储器1003和通信总线1004,其中,处理器1001,通信接口1002,存储器1003通过通信总线1004完成相互间的通信,
存储器1003,用于存放计算机程序;
处理器1001,用于执行存储器1003上所存放的程序时,实现上述方法实施例中的方法步骤。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,RAM),也可以包括非易失性存储器(Non-Volatile Memory,NVM),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一云通信方法的步骤。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一云通信方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk (SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。