一种实时选座方法及装置与流程

文档序号:11215721阅读:763来源:国知局
一种实时选座方法及装置与流程

本发明涉及在线购票技术,尤其涉及一种实时选座方法及装置。



背景技术:

互联网技术的发展给人们带来了极大的便利,也给传统的产业带来了新的契机。以传统的影院为例,互联网技术的发展使得影院票务的电子化成为可能,通过互联网提供影院票务线上预订/在线选座业务,使得用户可以预先浏览最近放映的影片,并相应进行电子购票,避免了用户以前观看影片时需现场购票导致的等待时间较长以及无法预知所放影片的技术问题。

对于影院来说,为客户提供一快速的在线选座购票平台可以有效提升核心竞争力,而从普通用户的角度出发,如何快速、简单、舒适的进行在线购票才是最重要的。尤其是当用户购买偶像的演唱会门票或一期待已久的热门话剧演出票时,在线选座购票平台如何在现有库存票务不足以满足强大购买力的情况下,为每一用户快速购买到用户想要的票务,有效缩短用户购票时间,最大化满足用户购买需求显得尤为重要。

线上预订/在线选座业务购票一般包含登录进入在线选座购票平台、选座、确认选座有效、支付、生成订单等多个流程,其中,选座是购票按流程中最耗时的一子流程,也是最容易影响用户购票体验的一关键因素。

目前的线上预订/在线选座业务提供的选座方法,采用的是基于http协议的非实时选座方式,即当用户进入在线选座购票平台后,用户并不知晓哪些座位已被选定,当点击选择一预期座位后,通过将选择的座位信息向管理票务的服务端发送,服务端判别该座位是否被其他用户选择,如果该座位已被其他用户选择,在该种情形下,服务端返回相关信息,例如,通过视窗(view)以一弹框弹出一提示信息,以告知用户该座位已经被其他用户选中,请选择其他座位。浏览到该提示信息后,用户只能关闭弹框,然后继续选择座位。这样,在购买票务尤其是热门票务时,用户往往需要经过多次选择才能完成购票,或者,经过几次选择的耽误,座位已经被其它用户选择完毕,使得选座占用用户较多时间,购票效率较低,在线购票成功率不高。



技术实现要素:

有鉴于此,本发明实施例提供一种实时选座方法及装置,能够提升购票效率,以解决现有的选座方法中采用非实时选座方式进行在线购票导致的购票效率及购票成功率不高的问题。

第一方面,本发明实施例提供一种实时选座方法,包括:

创建与服务端的websockets连接;

监测到绘制为可选状态的座位被选中后,通过创建的所述与服务端的websockets连接将选中的座位信息传输至服务端,以使服务端向websockets连接的客户端发送所述选中的座位信息,并使接收到所述选中的座位信息的客户端将被选中的座位绘制为不可选状态。

结合第一方面,在第一方面的第一种实施方式中,所述创建与服务端的websockets连接包括:

获取服务端的websocket连接地址;

通过javascript实例化一websocket对象并传入获取的websocket连接地址,创建与所述传入的websocket连接地址的websocket连接。

结合第一方面的第一种实施方式,在第一方面的第二种实施方式中,所述获取服务端的websocket连接地址包括:

客户端以异步方式获取服务端的推送服务接口,通过所述推送服务接口获取所述websocket连接地址。

结合第一方面的第一种实施方式,在第一方面的第三种实施方式中,在所述获取服务端的websocket连接地址之后,通过javascript实例化一websocket对象并传入获取的websocket连接地址之前,该方法还包括:

判断客户端的当前浏览器是否支持websocketapi,如果支持,执行所述通过javascript实例化一websocket对象并传入获取的websocket连接地址的步骤。

结合第一方面、第一方面的第一种至第三种中任一种实施方式,在第一方面的第四种实施方式中,所述将选中的座位信息传输至服务端包括:

调用锁座接口,以post方式将选中的座位信息异步传输到服务端。

结合第一方面的第四种实施方式,在第一方面的第五种实施方式中,所述调用锁座接口,以post方式将选中的座位信息异步传输到服务端包括:

将选中的座位信息封装为javascript对象;

通过fetchapi调用服务端提供的锁座接口,通过post方式将所述javascript对象传输至服务端。

结合第一方面、第一方面的第一种至第三种中任一种实施方式,在第一方面的第六种实施方式中,所述将被选中的座位绘制为不可选状态包括:

依次将选中的座位信息,以基于react&redux架构的单项数据流方式传输到筛选器中进行座位图的计算与渲染。

结合第一方面,在第一方面的第七种实施方式中,所述方法还包括:

在座位被选中后,开始计时;

当计时超过预先设置的第一计时阈值后仍没有接收到包含所述选中的座位的订单成功信息,判断所述websocket连接是否异常,如果异常,调用websocket.close()方法关闭所述websocket连接,并在重新构建websocket连接后,向服务端传输将选中的座位信息更新为未被选中的信息。

结合第一方面的第七种实施方式,在第一方面的第八种实施方式中,所述判断所述websocket连接是否异常包括:

提取实例化的所述websocket对象的readystate属性值,利用所述readystate属性值判断所述websocket连接是否异常。

第二方面,本发明实施例提供一种实时选座装置,包括:

连接创建模块,用于创建与服务端的websockets连接;

选座锁定模块,用于在监测到绘制为可选状态的座位被选中后,通过创建的所述与服务端的websockets连接将选中的座位信息传输至服务端,以使服务端向websockets连接的客户端发送所述选中的座位信息,并使接收到所述选中的座位信息的客户端将被选中的座位绘制为不可选状态。

本发明实施例提供的一种实时选座方法及装置,通过创建与服务端的websockets连接;监测到绘制为可选状态的座位被选中后,通过创建的所述与服务端的websockets连接将选中的座位信息传输至服务端,以使服务端向websockets连接的客户端发送所述选中的座位信息,并使接收到所述选中的座位信息的客户端将被选中的座位绘制为不可选状态,能够提升在线购票效率,以解决现有的选座方法中采用非实时选座方式进行在线购票导致的购票效率不高的问题。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明的实施例一实时选座方法流程示意图;

图2为本发明的实施例二实时选座装置结构示意图。

具体实施方式

下面结合附图对本发明实施例进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

图1为本发明的实施例一实时选座方法流程示意图,如图1所示,本实施例的方法可以包括:

步骤101,创建与服务端的websockets连接;

本实施例中,web套接字(sockets)是html5中出现的一个新的api技术,是下一代客户端与服务端的异步通讯方式,相比于长轮询(ajaxlong-polling)技术等传统的方式,websockets技术无论在技术实现还是性能上会更高一筹,在一个单独的持久连接上提供全双工、双向通讯,服务端与客户端可以在给定的时间范围内的任意时刻互相推送信息,并且允许跨域通讯。

本实施例中,服务端为支持websocket协议的服务器,而现有使用标准http协议的服务端无法实现websockets协议,由于http协议只能实现单向的通信,因而,无论是轮询(polling)还是长连接(longpolling),都需要由浏览器对服务端发出http请求,然后由服务端返回最新的数据给客户端的浏览器,需要浏览器不断的向服务端发出请求,服务端依据请求返回相应响应,由于客户端和服务端之间的http连接需要身份验证,会产生频繁的身份验证以及重复的信息发送。而websocket协议是基于tcp的一种新的网络协议,能够实现浏览器与服务端全双工(full-duplex)通信,使得服务端能够主动发送(推送)信息给客户端而无需等待客户端的请求,服务端与客户端进行双向通信,可以完全避免频繁的身份验证等开销,同时,利用websocket协议,可以在服务端和客户端之间传输数据包非常小的少量数据,服务端不再被动接收客户端浏览器的请求之后才返回数据,而是在有新数据时就主动推送给客户端浏览器,可以有效减少等待请求的时间,实时性高。

本实施例中,作为一可选实施例,创建与服务端的websockets连接包括:

a11,获取服务端的websocket连接地址;

本实施例中,websocket连接地址包括:未加密的websocket连接地址以及加密的websocket连接地址,其中,未加密的websocket连接地址模式为ws://,加密的websocket连接地址模式为wss://。

本实施例中,作为一可选实施例,还可以获取服务端的websocket端口信息。

本实施例中,作为一可选实施例,获取服务端的websocket连接地址包括:

客户端以异步方式获取服务端的推送服务接口,通过所述推送服务接口获取所述websocket连接地址。

本实施例中,作为一可选实施例,异步方式为fetchapi异步方式,推送服务接口为@push_service接口,即客户端需要与服务端构建连接时,以fetchapi异步方式获取(get)服务端的@push_service接口,通过所述@push_service接口获取websocket连接地址。

a12,通过javascript实例化一websocket对象并传入获取的websocket连接地址,创建与所述传入的websocket连接地址的websocket连接。

本实施例中,websocket连接是在客户端与服务端之间http协议的初始握手阶段,将http协议升级到websocket协议来建立的,websocket连接的底层仍是tcp/ip连接。具体来说,客户端在javascript中创建了websockets对象后,生成http请求并传输至浏览器以向服务端发起websockets连接,在取得服务端返回的http请求响应后,触发连接进行升级,即将连接使用的http协议升级为websocket协议。

作为另一可选实施例,在所述获取服务端的websocket连接地址之后,通过javascript实例化一websocket对象并传入获取的websocket连接地址之前,该方法还包括:

判断客户端的当前浏览器是否支持websocketapi,如果支持,执行所述通过javascript实例化一websocket对象并传入获取的websocket连接地址的步骤。

本实施例中,如果当前浏览器不支持websocketapi,则按照现有技术进行选座购票流程。

本实施例中,在实例化之后,浏览器与服务端创建一websocket连接。

步骤102,监测到绘制为可选状态的座位被选中后,通过创建的所述与服务端的websockets连接将选中的座位信息传输至服务端,以使服务端向websockets连接的客户端发送所述选中的座位信息,并使接收到所述选中的座位信息的客户端将被选中的座位绘制为不可选状态。

本实施例中,websockets连接的客户端是指与服务端构建有websockets连接的所有客户端,包括:与服务端构建有websockets连接的传输选中的座位信息的客户端以及与服务端构建有websockets连接的其他客户端。

本实施例中,以影院为例,一个演出票选座项目会根据票价和场馆划分很多不同的分区,每一分区设有若干座位。对于非常抢手的爆款项目来说,开票时间开始后的一段时间内通常都是购票的高峰期,这时候会有大量用户进入该项目进行购票,目前,用户在选取座位时,不能知晓该座位是否已被其他用户选取,只有将该选取的座位信息传输至服务端,经过服务端的判别并返回相应的判别结果,才能知晓选取的座位是否已被其它用户选取,在已被其它用户选取的情况下,需要再重新选取座位并执行相类似的流程,只有在选取的座位未被其它用户选取的情形下,进行支付生成订单,使得购票成功率以及效率都较低。

本实施例中,用户在登录进入在线选座购票平台后,能够供用户选择的座位被浏览器绘制为可选状态,不能够供用户选择的座位被浏览器绘制为不可选状态,从而在用户选择座位的同时,能实时知晓该分区的一个或多个座位是否已经被其他用户选取,从而从未被其他用户选取的座位中选取座位进行购票。

本实施例中,作为一可选实施例,以影院为例,座位信息包括但不限于:座位标识(seatid)、场次标识(showid、分区标识(areaid)等。当然,实际应用中,座位信息还可以是长途汽车上的座位信息、游轮以及火车上的座位信息、飞机上的座位信息、球场座位信息等,本实施例对此不作限定。

本实施例中,作为一可选实施例,可通过在浏览器中设置监测进程,用以监测用户对座位的选择。

本实施例中,作为一可选实施例,将选中的座位信息传输至服务端包括:

调用锁座接口,以post方式将选中的座位信息异步传输到服务端。

本实施例中,锁座接口为@post/tickets锁座接口,当在线选座购票平台中的某一个座位被选中时,选中座位的客户端通过websockets连接的websockets通道,调用@post/tickets锁座接口,以post方式将选中的座位信息异步传输到服务端。

本实施例中,作为一可选实施例,调用锁座接口,以post方式将选中的座位信息异步传输到服务端包括:

将选中的座位信息封装为javascript对象;

通过fetchapi调用服务端提供的锁座接口,通过post方式将所述javascript对象传输至服务端。

本实施例中,当用户在选座页面选中一个座位,通过fetchapi调用服务端提供的一锁座接口,通过post方式将选中的座位标识(seatid)、场次标识(showid、分区标识(areaid)所封装的javascript对象传给服务端。

本实施例中,服务端接收到选中的座位信息(javascript对象)后,将选中的座位信息推送(push)到预先设置的锁座列表中,然后从锁座列表中,通过websockets通道向与其websockets连接的所有客户端推送该选中的座位信息,当服务端向客户端推送信息时,触发客户端的消息(message)事件,客户端在message事件触发后,利用onmeassage的回调函数,将接收到的javascript对象进行解析,得到选中的座位信息并保存到预先设置的锁座存储器(lockedseatstore)的状态树(state)中,然后,依据状态树中的座位信息,将选中的座位绘制成不可选状态。

本实施例中,作为一可选实施例,将被选中的座位绘制为不可选状态包括:

依次将选中的座位信息(每次单个座位),以基于react&redux架构的单项数据流方式传输到筛选器(selector)中进行座位图的计算与渲染。

本实施例中,每一次座位渲染,筛选器都会根据存储的座位列表(seatslist)、用户自己选择的座位列表(userseatslist)和已经被锁住的座位(lockedseat)的信息来计算出新的座位状态数据集合,得到更新座位列表(newseatlist),用以替换座位列表(seatslist),每当接收到有新的被实时锁住的座位时,进行一次座位渲染。

本实施例中,由于采用websockets连接,选中座位至将选中的座位在各客户端绘制成不可选状态的整个过程为异步过程,不需要各客户端刷新页面就可以将已经被选中(锁住)的座位实时渲染到座位图中,在用户选择座位后,可以直接进行支付、生成订单等流程,从而可以有效降低用户选择的座位已被其他用户选择的情形而导致的选座时间。

本实施例中,作为一可选实施例,在所述创建与服务端的websockets连接之后,监测到绘制为可选状态的座位被选中后之前,该方法还包括:

从所述服务端获取最新的票务座位列表并存储。

本实施例中,在创建与服务端的websockets连接后,可以在线选座购票平台中选取所需购买的票务类型,例如,演出门票,触发从服务端获取最新的演出门票票务座位列表并存储。也可以是直接从服务端获取最新的各票务座位列表并存储。

本实施例中,作为一可选实施例,该方法还包括:

在座位被选中后,开始计时;

当计时超过预先设置的第一计时阈值后仍没有接收到包含所述选中的座位的订单成功信息,判断所述websocket连接是否异常,如果异常,调用websocket.close()方法关闭所述websocket连接,并在重新构建websocket连接后,向服务端传输将选中的座位信息更新为未被选中的信息。

本实施例中,作为一可选实施例,判断所述websocket连接是否异常包括:

提取实例化的所述websocket对象的readystate属性值,利用所述readystate属性值判断所述websocket连接是否异常。

本实施例中,当出现异常情况时,触发实例化的websocket对象的onclose方法,即客户端根据websocket对象的readystate属性来判断当前的websocket连接是否已经进入了异常状态,如果是,则触发实例化的websocket对象的onclose方法调用websocket.close()方法关闭websocket连接以释放资源。

本实施例中,如果在预先设置的第一计时阈值内接收到包含所述选中的座位的订单成功信息,则正常关闭websocket连接。

本实施例中,作为一可选实施例,可以通过设置心跳检测来完成心跳重连,即在客户端设置定时器重新创建websocket连接。

本实施例中,作为另一可选实施例,也可以在用户选完座位进入到下一个页面操作(例如,支付页面)后,则直接断开websocket连接,恢复为http连接。

本实施例中,通过实时的锁座方法,即当用户进入一个分区选择座位时,已经被选择的座位会实时的置灰变成不可选状态,从而能够实时浏览到该分区座位图中的哪些座位已经被别人选择,因而,用户只要将自己的视觉范围直接定位到那些可选状态的座位即可,快速选中自己心仪的座位,有效提升购票成功率,购票占用的用户时间少,购票效率高。

图2为本发明的实施例二实时选座装置结构示意图,如图2所示,本实施例的装置可以包括:连接创建模块21以及选座锁定模块22,其中,

连接创建模块21,用于创建与服务端的websockets连接;

选座锁定模块22,用于在监测到绘制为可选状态的座位被选中后,通过创建的所述与服务端的websockets连接将选中的座位信息传输至服务端,以使服务端向websockets连接的客户端发送所述选中的座位信息,并使接收到所述选中的座位信息的客户端将被选中的座位绘制为不可选状态。

本实施例中,作为一可选实施例,连接创建模块21包括:连接地址获取单元以及实例创建单元(图中未示出),其中,

连接地址获取单元,用于获取服务端的websocket连接地址;

本实施例中,websocket连接地址包括:未加密的websocket连接地址以及加密的websocket连接地址,其中,未加密的websocket连接地址模式为ws://,加密的websocket连接地址模式为wss://。

本实施例中,作为一可选实施例,所述获取服务端的websocket连接地址包括:

客户端以异步方式获取服务端的推送服务接口,通过所述推送服务接口获取所述websocket连接地址。

本实施例中,作为一可选实施例,异步方式为fetchapi异步方式,推送服务接口为@push_service接口。

实例创建单元,用于通过javascript实例化一websocket对象并传入获取的websocket连接地址,创建与所述传入的websocket连接地址的websocket连接。

本实施例中,作为另一可选实施例,连接创建模块还可以包括:

接口支持判断单元,用于在所述获取服务端的websocket连接地址之后,判断客户端的当前浏览器是否支持websocketapi,如果支持,通知实例创建单元。

本实施例中,作为一可选实施例,选座锁定模块22包括:监测单元以及传输单元(图中未示出),其中,

监测单元,用于在监测到绘制为可选状态的座位被选中后,通知传输单元;

传输单元,用于通过创建的所述与服务端的websockets连接调用锁座接口,以post方式将选中的座位信息异步传输到服务端,以使服务端向websockets连接的客户端发送所述选中的座位信息,并使接收到所述选中的座位信息的客户端将被选中的座位绘制为不可选状态。

本实施例中,作为一可选实施例,以影院为例,座位信息包括但不限于:座位标识(seatid)、场次标识(showid、分区标识(areaid)等。当然,实际应用中,座位信息还可以是长途汽车上的座位信息、游轮以及火车上的座位信息、飞机上的座位信息、球场座位信息等,本实施例对此不作限定。

本实施例中,作为一可选实施例,传输单元包括:

封装子单元,用于将选中的座位信息封装为javascript对象;

传输子单元,用于通过fetchapi调用服务端提供的锁座接口,通过post方式将所述javascript对象传输至服务端。

本实施例中,当用户在选座页面选中一个座位,通过fetchapi调用服务端提供的一锁座接口,通过post方式将选中的座位标识(seatid)、场次标识(showid、分区标识(areaid)所封装的javascript对象传给服务端。

本实施例中,作为一可选实施例,所述将被选中的座位绘制为不可选状态包括:

依次将选中的座位信息,以基于react&redux架构的单项数据流方式传输到筛选器中进行座位图的计算与渲染。

本实施例中,作为另一可选实施例,所述装置还包括:计时模块以及连接状态监测模块(图中未示出),其中,

计时模块,用于在座位被选中后,开始计时;

连接状态监测模块,用于当计时超过预先设置的第一计时阈值后仍没有接收到包含所述选中的座位的订单成功信息,判断所述websocket连接是否异常,如果异常,调用websocket.close()装置关闭所述websocket连接,并在重新构建websocket连接后,向服务端传输将选中的座位信息更新为未被选中的信息。

本实施例中,作为一可选实施例,所述判断所述websocket连接是否异常包括:

提取实例化的所述websocket对象的readystate属性值,利用所述readystate属性值判断所述websocket连接是否异常。

本实施例中,如果在预先设置的第一计时阈值内接收到包含所述选中的座位的订单成功信息,则正常关闭websocket连接。

本实施例中,作为再一可选实施例,该装置还包括:

座位更新模块,用于从所述服务端获取最新的票务座位列表并存储。

本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。

尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(ram),只读存储器(rom),可擦除可编辑只读存储器(eprom或闪速存储器),光纤装置,以及便携式光盘只读存储器(cdrom)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。

在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(pga),现场可编程门阵列(fpga)等。

本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。

为了描述的方便,描述以上装置是以功能分为各种单元/模块分别描述。当然,在实施本发明时可以把各单元/模块的功能在同一个或多个软件和/或硬件中实现。

通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1