CN113535339A - 一种调用服务的方法以及装置 - Google Patents
一种调用服务的方法以及装置 Download PDFInfo
- Publication number
- CN113535339A CN113535339A CN202110811737.1A CN202110811737A CN113535339A CN 113535339 A CN113535339 A CN 113535339A CN 202110811737 A CN202110811737 A CN 202110811737A CN 113535339 A CN113535339 A CN 113535339A
- Authority
- CN
- China
- Prior art keywords
- task
- calling
- state
- transaction identifier
- service
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1202—Dedicated interfaces to print systems specifically adapted to achieve a particular effect
- G06F3/1203—Improving or facilitating administration, e.g. print management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1202—Dedicated interfaces to print systems specifically adapted to achieve a particular effect
- G06F3/1211—Improving printing performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1223—Dedicated interfaces to print systems specifically adapted to use a particular technique
- G06F3/1237—Print job management
- G06F3/126—Job scheduling, e.g. queuing, determine appropriate device
- G06F3/1263—Job scheduling, e.g. queuing, determine appropriate device based on job priority, e.g. re-arranging the order of jobs, e.g. the printing sequence
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/12—Digital output to print unit, e.g. line printer, chain printer
- G06F3/1201—Dedicated interfaces to print systems
- G06F3/1278—Dedicated interfaces to print systems specifically adapted to adopt a particular infrastructure
- G06F3/1284—Local printer device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Computer And Data Communications (AREA)
Abstract
本申请公开一种调用服务的方法,该方法包括:获取客户端发送的任务调用请求;根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。这样,便实现了设备的共享,支持复杂的服务调用功能流程,从而可以将服务调度方案完全交给客户端控制,十分灵活,不需要应用专门开发调度模块,只要根据实际的调用情况配置事务标识和调用标识即可,也降低了交互次数和复杂度,并且不需要和传统方式一样,需要人工操作服务的调用任务排队,可以避免由于人工操作服务的调用任务排队所导致的调用错误,从而提高了调用服务的效率。
Description
技术领域
本申请涉及操作系统技术领域,尤其涉及一种调用服务的方法、装置。
背景技术
一些资源在应用之间或用户之间共同使用的时候,就涉及调度和管理。与一般的调度管理不同,这里涉及的主要是计算机外设资源的调度和管理。其中,外设资源指的一般不是鼠标键盘之类的系统调度管理的设备,主要是面向金融领域或者办公领域一些操作系统没有预先定义的设备。鼠标键盘等通过操作系统的有关api应用就可以直接使用,不存在调度的需求。系统没有定义的串口设备如银行的一些打印机,密码键盘,刷卡器等,特殊设备如U盾、点钞机等。这些外设的特点与一般的服务资源不同,这些外设都需要在调用过程中,需要由人工手动操作,才能完成任务。这是与一般调度机制最大的不同。比如一般的任务可以有队列等待,但是这些外设的任务排队会导致人工操作的时候,不知道对应的是那一个请求,会不知道刷哪个卡,或者不知道放支票还是放存单或者哪张别的凭证纸。这样,由于人工操作外设的调用任务排队的过程复杂繁琐,人工操作外设的调用任务排队容易出错,因此,人工操作外设的调用任务排队的方式导致外设的调用任务排队的效率低下。故,亟需一种能够提高外设的调用任务排队的效率的方案。
发明内容
本申请提供一种调用服务的方法,以可以提高调用服务的效率。
第一方面,本申请提供了一种调用服务的方法,所述方法应用于服务侧,所述服务侧包括服务,所述方法包括:
获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;
根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;
根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。
可选的,若服务的当前调用状态为可用状态,所述任务内容为执行一次的任务内容,所述调用标识为非占用;
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为使用中状态,并配置任务参数,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,根据所述事务标识,执行一次所述事务标识对应的任务内容,得到所述任务内容的对应的任务结果,以及,清除任务资源;
向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,若服务的当前调用状态为可用状态,所述任务内容为连续执行N次同操作类型的任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,配置任务参数;对第一次的任务内容,根据所述事务标识,确定所述第一次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;
对第i次的任务内容,根据所述事务标识,将所述服务的由占用状态调整为占用使用中状态,并确定所述第i次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态,其中,i为大于1且小于N的正整数;
对第N次的任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N次的任务内容对应的任务结果,以及,清除任务资源;向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述方法还包括:
在向所述客户端返回第j次的任务内容对应的任务结果后,接收强制结束指令;其中,j为正整数;
响应于所述强制结束指令,取消执行所述第j+1次的任务内容,以及清除任务资源;并将所述服务的当前调用状态由占用使用中状态调整为可用状态。
可选的,在所述向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态之后,所述方法还包括:
若接收到另一客户端发送的任务调用请求,且所述另一客户端发送的任务调用请求中的任务内容、事务标识与所述客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别,则将所述另一客户端发送的任务调用请求中的任务内容、事务标识加入待处理缓存队列;
对所述另一客户端发送的任务调用请求中的任务内容,根据所述另一客户端发送的任务调用请求中的事务标识,将所述服务的当前状态由占用状态调整为占用使用中状态,并确定所述另一客户端发送的任务调用请求中的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态。
可选的,若服务的当前调用状态为可用状态,所述任务内容为执行不同操作类型的N个任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的不同操作类型的N个任务内容,配置任务参数;
对第一个任务内容,开始根据所述事务标识,执行所述第一个任务内容时,将所述服务的当前调用状态由占用使用中状态调整为占用状态;根据所述事务标识,执行所述第一个任务内容的过程中,向所述客户端返回实时消息;确定所述第一个任务内容对应的第一任务结果,向所述客户端返回所述第一任务结果;
对第P个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为占用使用中状态,确定所述第P个任务内容对应的第P任务结果,向所述客户端返回所述第P任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,P为大于1且小于N的正整数;
对所述第N个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N个任务内容对应的第N任务结果,以及,清除任务资源;向所述客户端返回所述第N任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述方法还包括:
若1≤Y<N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为占用使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,Y为正整数;
若Y为N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;清除任务资源;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述方法还包括:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之后,若接收到强制结束指令,响应于所述强制结束指令,清除任务资源;将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
可选的,所述方法还包括:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到强制取消指令,响应于所述强制取消指令,清除任务资源;向所述客户端返回取消成功结果,并将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
可选的,若所述服务的当前调用状态为占用使用中状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为占用状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为使用中状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为可用状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行非占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,对所述另一任务调用请求进行非占用使用。
第二方面,本申请提供了一种调用服务的装置,所述装置应用于服务侧,所述服务侧包括服务,所述装置包括:
请求获取单元,用于获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;
调用确定单元,用于根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;
结果确定单元,用于根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。
可选的,若服务的当前调用状态为可用状态,所述任务内容为执行一次的任务内容,所述调用标识为非占用;
所述调用确定单元,具体用于:
将所述服务的当前调用状态由可用状态调整为使用中状态,并配置任务参数,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容;
所述结果确定单元,具体用于:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,根据所述事务标识,执行一次所述事务标识对应的任务内容,得到所述任务内容的对应的任务结果,以及,清除任务资源;
向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,若服务的当前调用状态为可用状态,所述任务内容为连续执行N次同操作类型的任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述调用确定单元,具体用于:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述结果确定单元,具体用于:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,配置任务参数;对第一次的任务内容,根据所述事务标识,确定所述第一次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;
对第i次的任务内容,根据所述事务标识,将所述服务的由占用状态调整为占用使用中状态,并确定所述第i次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态,其中,i为大于1且小于N的正整数;
对第N次的任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N次的任务内容对应的任务结果,以及,清除任务资源;向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述装置还包括强制结束单元,用于:
在向所述客户端返回第j次的任务内容对应的任务结果后,接收强制结束指令;其中,j为正整数;
响应于所述强制结束指令,取消执行所述第j+1次的任务内容,以及清除任务资源;并将所述服务的当前调用状态由占用使用中状态调整为可用状态。
可选的,所述装置还包括任务合并单元,用于:
在所述向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态之后,若接收到另一客户端发送的任务调用请求,且所述另一客户端发送的任务调用请求中的任务内容、事务标识与所述客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别,则将所述另一客户端发送的任务调用请求中的任务内容、事务标识加入待处理缓存队列;
对所述另一客户端发送的任务调用请求中的任务内容,根据所述另一客户端发送的任务调用请求中的事务标识,将所述服务的当前状态由占用状态调整为占用使用中状态,并确定所述另一客户端发送的任务调用请求中的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态。
可选的,若服务的当前调用状态为可用状态,所述任务内容为执行不同操作类型的N个任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述调用确定单元,具体用于:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的不同操作类型的N个任务内容,配置任务参数;
对第一个任务内容,开始根据所述事务标识,执行所述第一个任务内容时,将所述服务的当前调用状态由占用使用中状态调整为占用状态;根据所述事务标识,执行所述第一个任务内容的过程中,向所述客户端返回实时消息;确定所述第一个任务内容对应的第一任务结果,向所述客户端返回所述第一任务结果;
对第P个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为占用使用中状态,确定所述第P个任务内容对应的第P任务结果,向所述客户端返回所述第P任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,P为大于1且小于N的正整数;
对所述第N个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N个任务内容对应的第N任务结果,以及,清除任务资源;向所述客户端返回所述第N任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述装置还包括异步调用单元,用于:
若1≤Y<N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为占用使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,Y为正整数;
若Y为N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;清除任务资源;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述装置还包括强制结束异步单元,用于:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之后,若接收到强制结束指令,响应于所述强制结束指令,清除任务资源;将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
可选的,所述装置还包括强制结束异步单元,用于:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到强制取消指令,响应于所述强制取消指令,清除任务资源;向所述客户端返回取消成功结果,并将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
可选的,若所述服务的当前调用状态为占用使用中状态,所述装置还包括第一单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为占用状态,所述装置还包括第二单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为使用中状态,所述装置还包括第三单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为可用状态,所述装置还包括第四单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行非占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,对所述另一任务调用请求进行非占用使用。
第三方面,本申请提供了一种可读介质,包括执行指令,当电子设备的处理器执行所述执行指令时,所述电子设备执行如第一方面中任一所述的方法。
第四方面,本申请提供了一种电子设备,包括处理器以及存储有执行指令的存储器,当所述处理器执行所述存储器存储的所述执行指令时,所述处理器执行如第一方面中任一所述的方法。
由上述技术方案可以看出,本申请提供了一种调用服务的方法,所述方法应用于服务侧,所述服务侧包括服务,所述方法可以包括:获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。这样,在本实施例中,任何客户端均可以通过在任务调用请求中设置事务标识和调用标识,便可以利用事务标识和调用标识对服务侧中的服务进行调用,这样,便实现了设备的共享,支持复杂的服务调用功能流程,从而可以将服务调度方案完全交给客户端控制,十分灵活,不需要应用专门开发调度模块,只要根据实际的调用情况配置事务标识和调用标识即可,也降低了交互次数和复杂度,并且不需要和传统方式一样,需要人工操作服务的调用任务排队,可以避免由于人工操作服务的调用任务排队所导致的调用错误,从而提高了调用服务的效率。
上述的非惯用的优选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
为了更清楚地说明本申请实施例或现有的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施例提供的一种示例性应用场景的框架示意图;
图2为本申请一实施例提供的一种调用服务的方法的流程示意图;
图3为本申请一实施例提供的一种调用状态的转换示意图;
图4为本申请一实施例提供的一种一般调用、占用调用和异步调用的交互流程示意图;
图5为本申请一实施例提供的一种一般占用的交互流程示意图;
图6为本申请一实施例提供的一种占用调用的交互流程示意图;
图7为本申请一实施例提供的一种占用调用的交互流程示意图;
图8为本申请一实施例提供的一种强制结束占用的交互流程示意图;
图9为本申请一实施例提供的一种强制结束占用的交互流程示意图;
图10为本申请一实施例提供的一种任务合并的交互流程示意图;
图11为本申请一实施例提供的一种任务合并的交互流程示意图;
图12为本申请一实施例提供的一种异步任务合并的交互流程示意图;
图13为本申请一实施例提供的一种异步调用的交互流程示意图;
图14为本申请一实施例提供的一种异步调用的交互流程示意图;
图15为本申请一实施例提供的一种异步取消的交互流程示意图;
图16为本申请一实施例提供的一种异步取消的交互流程示意图;
图17为本申请一实施例提供的一种强制结束异步的交互流程示意图;
图18为本申请一实施例提供的一种强制结束异步的交互流程示意图;
图19为本申请一实施例提供的一种强制结束取消异步的交互流程示意图;
图20为本申请一实施例提供的一种强制结束取消异步的交互流程示意图;
图21为本申请一实施例提供的一种调用服务的装置的结构示意图;
图22为本申请一实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合具体实施例及相应的附图对本申请的技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在一般的设备控制方案中,往往以上电开始,下电结束。这样可以有比较清晰的设备生命周期。上电的控制可以保存设备状态,因为设备本身有些是有状态的,尤其是一些金融类设备操作,不是简单操作设备,而是要先对让目标和后台进行校验,才能操作,这个情况下就要设备持续一段时间保持某个特定状态。比如金融IC卡写卡,需要先从卡内芯片生成一组校验数据,后台校验成功以后才能生成对应的写卡数据,然后使用写卡数据写卡。这个过程中,卡内芯片生成校验数据和写卡数据写卡会实际操作设备,后台校验过程不操作设备,这个过程中间设备内临时保存了用于校验的信息,如果下电或者应用调用了其他功能,校验信息就会被清除,导致得到的写卡数据写卡失败。下电可以清除设备状态,如果单纯一直保持状态,在连续使用设备的过程中,可能会出现其实本次设备操作失败了,但是因为设备内保存了前一次的结果,所以读取到了错误的数据,这样有较大的金融安全风险。
对于设备共享的需求,各个情况差异也比较大。比如一个办公室内大家共用一台打印机,如果打印机是纸打印a4纸,只要用普通的window共享打印就可以了,但是如果打印机打印内容各不相同,底图差异很大,如支票,快递单等,共享打印如果遇到两个任务同时发起,会导致实际操作打印机的时候,不知道该放那种凭证。需要调度机制根据实际情况判断哪些功能的事务可以排队或并发,哪些功能在使用过程中只能由一个事务独占。这里的事务指的是从open到close的整个过程。对应到刚刚打印的例子,如果都是打印a4纸,第一次open以后,后续的open都只增加计数,多个人的应用都可以随机顺序执行,各个close请求减少计数,归零的的时候一起执行一次close即可,可以称为事务合并。打印结束后,大家手工分类,调整文件顺序,就可以得到正确的结果。而支票和快递单同时请求的过程中,如果支票已经open了设备,那么快递单的open请求必须返回失败,要让打印快递单的操作人员确实知道当前的打印任务不是自己的快递单。而如果先打印的是快递单任务,再发起的又是一次快递单任务,这样的事务可以合并,也说明事务是否可以合并不仅仅是接口相同,而是要接口和参数内容共同决定的。这是现在普遍缺乏的调度机制。
设备类型或者具体设备之间的请求应该是隔离的,即IC卡读卡器的状态与打印机的状态互相没有影响,这个一般的方案都能实现。对于一个类型有多种设备的情况,如连接了多台打印机,一般可以让应用获取打打印机列表,然后选择要用的设备,而非随机选取,因为真的要有人走到打印机面前操作,随机打印就算可以告知用户是哪个机器,对于使用者来说也是很不好的体验。还有设备升级之类的功能,不可以随机发布任务。几乎不存在可以随机发布的任务。所以相同类型的设备也都作为单独的模块进行事务调度,不做事务转发。
open和close的方式控制虽然可以保证流程,但是这个方案在面向基于网络的调用过程中,会增加交互次数,整体链路越长,成本越高。而从调用请求本身来看,绝大多数设备操作功能都只要一次操作,如果每次操作是一个请求,操作前后的上下电各一次请求,用于上下电的请求数量达到了实际功能请求的两倍,极大的浪费了资源,提高了应用的复杂性。有些任务要保持原子化,比如有些打印过程,如果开始打印就不可取消,所以要有真的同步阻塞。有些任务要保持状态,如IC卡,需要调用之间有关联,也要有能力确保清除状态。有些任务时间会很长,比如外设更新固件,一些交互设备下载多媒体资源等。有些任务可能需要很长时间来完成,对整个流程的交互过程设计要求就会很高,可能会需要进度条等相对复杂的交互出现,还没有其他方案能够有效的调度类似支票和快递单共享打印的冲突。而且这个冲突不仅仅是打印,是很多情景都会有,可以合并的事务内实际的设备操作也可以不同,而且无法靠服务里面配置调用请求的类型来穷举,因为真正知道事务是否可以合并的只有创建事务的模块应用,应该是发起事务的应用程序,通过类似于白名单的机制,来匹配事务是否可以被合并。
目前,一些资源在应用之间或用户之间共同使用的时候,就涉及调度和管理。与一般的调度管理不同,这里涉及的主要是计算机外设资源的调度和管理。其中,外设资源指的一般不是鼠标键盘之类的系统调度管理的设备,主要是面向金融领域或者办公领域一些操作系统没有预先定义的设备。鼠标键盘等通过操作系统的有关api应用就可以直接使用,不存在调度的需求。系统没有定义的串口设备如银行的一些打印机,密码键盘,刷卡器等,特殊设备如U盾、点钞机等。这些外设的特点与一般的服务资源不同,这些外设都需要在调用过程中,需要由人工手动操作,才能完成任务。这是与一般调度机制最大的不同。比如一般的任务可以有队列等待,但是这些外设的任务排队会导致人工操作的时候,不知道对应的是那一个请求,会不知道刷哪个卡,或者不知道放支票还是放存单或者哪张别的凭证纸。这样,由于人工操作外设的调用任务排队的过程复杂繁琐,人工操作外设的调用任务排队容易出错,因此,人工操作外设的调用任务排队的方式导致外设的调用任务排队的效率低下。故,亟需一种能够提高外设的调用任务排队的效率的方案。
本申请提供了一种调用服务的方法,所述方法应用于服务侧,所述服务侧包括服务,所述方法可以包括:获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。这样,在本实施例中,任何客户端均可以通过在任务调用请求中设置事务标识和调用标识,便可以利用事务标识和调用标识对服务侧中的服务进行调用,这样,便实现了设备的共享,支持复杂的服务调用功能流程,从而可以将服务调度方案完全交给客户端控制,十分灵活,不需要应用专门开发调度模块,只要根据实际的调用情况配置事务标识和调用标识即可,也降低了交互次数和复杂度,并且不需要和传统方式一样,需要人工操作服务的调用任务排队,可以避免由于人工操作服务的调用任务排队所导致的调用错误,从而提高了调用服务的效率。
需要说明的是,本申请实施例可以应用于如图1所示的场景,如图1所示,所述场景可以包括客户端(比如java应用、web应用或者其他应用)、服务(例如通信模块、调度模块或者其他模块)、驱动(即驱动模块)。
需要注意的是,上述应用场景仅是为了便于理解本申请而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
下面结合附图,详细说明本申请的各种非限制性实施方式。
参见图2,示出了本申请实施例中的一种调用服务的方法,所述方法应用于服务侧,所述服务侧可以包括服务,或者服务和驱动内线程,在本实施例中,所述方法例如可以包括以下步骤:
S201:获取客户端发送的任务调用请求。
在本实施例中,服务可以接收客户端发送的任务调用请求,其中,所述任务调用请求可以包括任务内容、事务标识和调用标识。任务内容可以理解为具体的任务执行内容,例如,任务内容可以为需要打印的具体内容。事务标识可以理解为任务内容对应的标识信息,在一种实现方式中,事务标识可以包括用户名、客户端标识、业务的操作类型/级别,例如,客户端A加密数据的事务标识为U01_A_C105,客户端B加密数据的事务标识y为U01_B_C201,客户端C密码器主密钥更新的事务标识为U01_C_U001,其中,U01表示用户名,第五位的A、B、C表示客户端标识,第七位的C表示业务的操作类型为加密数据,第七位的U表示业务的操作类型为更新主密钥,最后的数字为随机数。调用标识为任务调用对于服务的调用状态的需求,在一种实现方式中,如图3所示,调用标识可以包括可用状态(即可用)、使用中状态(即使用中)、占用和占用使用中状态(即占用使用中),其中,这四种状态之间可以切换。例如可用状态可以切换至占用使用中状态和使用中状态,使用中状态可以切换至可用状态,占用状态可以切换至使用中状态,占用使用中状态和占用状态可以相互切换;调用标识表示的就是一个事务是否存续,通过一个事务标识来匹配控制。比如对于前面提到的两个快递单的情况,只要快递单事务有相同的事务标识,就可以自动合并了。
S202:根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果。
服务的当前调用状态可以理解为服务在当前所处于的调用状态,所述服务的当前调用状态可以包括可用状态、使用中状态、占用和占用使用中状态,其中,可用状态可以理解为随时可以处理任务的空闲状态,使用中状态可以理解为只进行一次调用执行任务便结束调用的状态(比如服务所执行的任务为仅打印一页文档),占用状态可以理解正在执行多次调用执行任务的过程中的等待状态(比如服务所执行的任务为打印多页文档,服务在等待启动打印多页文档中的一页文档的时候),占用使用中状态可以理解正在执行多次调用执行任务的过程中正在执行一次任务的状态(比如服务所执行的任务为打印多页文档,服务正在打印多页文档中的一页文档的时候)。在获取到客户端发送的任务调用请求之后,服务可以根据客户端发送的任务调用请求中的调用标识与所述服务的当前调用状态,判断所述任务调用请求中的事务标识是否可以调用所述服务,而所述事务标识对应的调用结果可以反映所述任务调用请求中的事务标识是否可以调用所述服务的结果。
S203:根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。
若所述调用结果为可以调用所述服务,则可以调用服务执行所述任务内容,得到所述任务内容对应任务结果,并向所述客户端返回所述任务结果,其中,所述任务结果可以为通过运算或读取所得到的数据,也可以为通知消息(比如打印成功消息)。若所述调用结果为不可以调用所述服务,则可以得到所述任务内容对应任务结果为调用服务失败,并向所述客户端返回所述任务结果,以通知客户端调用失败,其中,所述任务结果还可以包括调用失败原因(比如服务被xx设备占用)。
在本实施例的一种实现方式中,如表1所示,若所述服务的当前调用状态为占用使用中状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可以理解的是,若服务收到事务标识与保存的当前实际请求操作(即所述任务调用请求)的事务标识不同且占用标识的任意请求会立即返回设备占用中的信息,告知用户设备正在执行占用调用或者异步调用,短时间内都无法使用。若服务收到事务标识与保存的当前实际请求操作(即所述任务调用请求)的事务标识相同且占用标志情况任意的请求,会等待实际请求操作结束返回以后转交给占用状态处理。实际请求操作(即所述任务调用请求)结束返回以后,服务会进入占用状态。在原子化状态下,虽然一般原子化任务时间都很短,但仍可能有异常情况或者特殊功能,导致这时候进入的请求可能会存在等待很久的情况,这里会定义一个较短(即小于预设阈值)的超时时间,超时后会返回设备使用中错误,超时时间不能太长避免用户误会调用已经正常发起在等待操作。
在一种实现方式中,如表1所示,若所述服务的当前调用状态为占用状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可以理解的是,若服务收到事务标识与保存的当前实际请求操作(即所述任务调用请求)的事务标识不同且占用标志情况任意的请求,服务会返回设备占用中错误的消息。若服务收到事务标识与保存的当前实际请求操作(即所述任务调用请求)的事务标识相同且事务不占用情况的请求,服务会进入使用中状态,并处理该请求。若服务收到事务标识与保存的当前实际请求操作(即所述任务调用请求)的事务标识相同且事务占用情况的请求,服务会进入占用使用中状态,并处理该请求。
在一种实现方式中,如表1所示,若所述服务的当前调用状态为使用中状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示。
可以理解的是,若服务收到任意占用标志和事务标识的请求都会向该请求对应的客户端返回阻塞请求,等待实际请求操作(即所述任务调用请求)结束返回后,由处于可用状态的服务处理。可以理解的是,实际请求操作结束返回以后(即服务执行完成任务调用请求),服务会进入可用状态。即一般的同步调用流程完成了一整个流程。在原子化状态下,虽然一般原子化任务时间都很短,但仍可能有异常情况或者特殊功能,导致这时候进入的请求可能会存在等待很久的情况,这里会定义一个较短(即小于预设阈值)的超时时间,超时后会返回设备使用中错误。超时时间不能太长避免用户误会调用已经正常发起在等待操作。
在一种实现方式中,如表1所示,若所述服务的当前调用状态为可用状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行非占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,对所述另一任务调用请求进行非占用使用。
可以理解的是,所述服务的当前调用状态为可用状态下,所述服务收到任意事务标识,且调用标识为不占用的任务调用请求,表示整个任务调用请求只有一次调用,服务就会进入使用中状态;而收到任意事务标识,调用标识为占用的任务调用请求,服务就会进入占用使用中状态同时保存该事务标识。
表1
接下来,结合具体例子,以共享一个指令打印机为例来对表1进行解释说明。打印任务有两种,单页打印和多页打印,每页任务都是一个单独的请求,或者说每页任务都是一个单独的原子任务,一个多页打印的任务是一组占用调用的单页任务组成的。打印机的设备有很多,比如一个办公室内所有设备共用一台打印机。
在可用状态下,即没有人正在使用打印机的时候,具体情况如下:
1.收到任意事务标识,事务不占用的请求,表示有一个员工设备U01发起了一个单页打印的请求A1,就会进入使用中状态。表示打印机正在执行某个单页打印任务A1。
2.收到任意事务标识,事务占用的请求,表示有一个员工设备U02发起了一个多页任务请求B1的第一页B1_1,记录了这个员工设备发起的任务标志标识,如工号U02,标识的选取与任务的维度有关。会进入占用使用中状态,表示打印机现在开始会接收若干页打印任务,时间会很久。其他人的任务都要直接返回“设备被U02员工设备占用中”的错误,程序不应该阻塞等待占用任务结束,因为大概率等不到,如果有其他员工设备急用,需要自行与占用设备的员工设备直接沟通,确认占用结束以后再使用打印机。
使用中状态下,即打印机正在执行某个单页打印任务A1或者多页打印任务B1的最后一页B1_n。
1.收到任意占用标志和事务标识的请求,表示有一个员工设备又发起了一个单页打印的请求A2或者多页请求B2的第一页B2_1,可以是同一个员工设备,A1时是U01,B1_n时是U02,也可以是其他员工设备Uxx。这时候会阻塞请求,等待实际请求操作结束返回后,由可用状态处理。即请求A2或者多页请求B2的第一页B2_1等待请求A1或者多页打印任务B1的最后一页B1_n结束,进入可用状态,然后执行。如果等待超时,请求A2会失败。返回“设备使用中”错误。如果缓存了多个任务,每个任务都会在前一个任务进入的下一个状态中处理。
2.实际请求操作结束返回以后,服务会进入可用状态。即一般的同步调用流程完成了一整个流程。表示任务A1或者任务B1_n结束。结果可以是正常打印成功,也可能是打印失败,如参数错误等,任务的结果不影响调度,此时设备可以正常进入空闲状态。A1就是一般调用,B1就是占用调用。
3.在原子化状态下,虽然一般原子化任务时间都很短,但仍可能有异常情况或者特殊功能,导致这时候进入的请求可能会存在等待很久的情况,这里会定义一个较短的超时时间,超时后会返回设备使用中错误。超时时间不能太长避免用户误会调用已经正常发起在等待操作。这里想说明,A1是原子化的任务,但是可能因为某些异常,比如打印机没有放纸等异常因素导致A1任务执行时间很长,所以可能会导致A2等待过程超时。另外,原子化任务执行时间长是不合理的,通常只有异常情况才会出现。如果一个任务已知是长时间的任务,应该占用设备,相当于告知他人不要等待自己结束。长时间任务不应认为是原子化任务,也不能长时间保持阻塞,所以长时间任务这个情况应该作为异步调用处理。
占用使用中状态下,表示多页打印过程B1中的某一页B1_x正在打印的过程中,可以是第一页B1_1,不会是最后一页B1_n。
1.收到事务标识与保存的当前实际请求操作的事务标识不同,占用标志任意的请求,即收到了其他员工设备U03,单页请求A3或多页打印B3的第一页的请求B3_1。会立即返回设备占用中的信息,告知用户设备正在执行占用调用或者异步调用,短时间内都无法使用。即A3或者B3_1的调用者会立即收到错误信息“设备被U02员工设备占用中”的错误信息。不会等待当前页打完或者占用结束。A3或者B3_1的发起员工设备U03应与U02直接沟通使用情况,待员工设备U02使用结束后再发起。
2.收到事务标识与保存的当前实际请求操作的事务标识相同,占用标志情况任意的请求,表示收到了员工设备U02的任务B1中的某一页B1_x+1,或者最后一页B1_n,会等待实际请求操作结束返回以后转交给占用状态处理。这里类似于A2和B2的情况,先将任务缓存,待后续状态处理,如果缓存超时,任务会失败,会返回“设备使用中“错误。
3.实际请求操作结束返回以后会进入占用状态。表示当本页B1_x打印任务结束以后,设备进入空闲,但是其他人仍然不可使用的状态。
4.是原子化状态。缓存任务超时情况与使用中状态缓存任务超时情况类似。表示每页任务B1_x都是原子化的,不会因为A3或者B3_1,或者后续的B1_x+1或者B1_n打断。
占用状态下,表示多页打印过程B1前一页B1_x已经打印结束,而B1_x+1还没有发起的状态。这时候打印机是空闲的,但是为了保证B1_x与B1_x+1连续,其他员工设备仍然不可以使用打印机。
1.收到事务标识与保存的当前实际请求操作的事务标识不同,占用标志情况任意的请求,即收到了其他员工设备U04的打印请求,可以是单页请求A4,可以是多页请求B4的第一页B4_1,会立即返回设备被员工设备U02占用中错误。不会等待占用结束。A4或者B4_1的发起员工设备U04应与U02直接沟通使用情况,待员工设备U02使用结束后再发起。
2.收到事务标识与保存的当前实际请求操作的事务标识相同,事务不占用情况的请求,表示收到了员工设备U02的打印请求B1的最后一页B1_n,会进入使用中状态。表示任务即将结束,后续任务可以进入缓存等待。
3.收到事务标识与保存的当前实际请求操作的事务标识相同,事务占用情况的请求,表示收到了员工设备U02的打印请求B1_x+1作为新的B1_x,会进入占用使用中状态。开始打印下一页,而打印任务还有若干。
如果使用中和占用使用中缓存了多个任务,每个任务都会在前一个任务进入的下一个状态中处理。比如单页任务A1的使用中状态,先后收到了U05的多页任务B5的第一页B5_1和U06单页任务A5,在进入可用状态以后,U05的多页任务B5的第一页B5_1会进入占用使用中状态,占用使用中状态收到U06的单页任务A5,此时会立即返回设备被U05员工设备占用的错误。
接下来,介绍本申请的一种一般调用的实现方式。在本实现方式中,若服务的当前调用状态为可用状态,所述任务内容为执行一次的任务内容,所述调用标识为非占用。
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为使用中状态,并配置任务参数,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容。
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,根据所述事务标识,执行一次所述事务标识对应的任务内容,得到所述任务内容的对应的任务结果,以及,清除任务资源;
向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
作为一种示例,如图4所示的一般调用的工作流程,客户端(即应用)通过接口调用向调度服务发送一任务调用请求,该任务调用请求的任务内容为执行一次的任务内容,且调用标识为非占用,而该调度服务的当前调用状态为可用状态。
调度服务可以将所述服务的当前调用状态由可用状态调整为使用中状态,并配置任务参数,比如,可以根据该任务内容和任务标识,先通过读取配置加载模块获取配置数据,然后,通过初始化模块进行初始化,接着,根据配置数据设置环境,紧接着,可以确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容。若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,根据所述事务标识,执行一次所述事务标识对应的任务内容,得到所述任务内容的对应的任务结果,以及,清除任务资源。例如,可以通过调用接口调用服务,以及,通过服务执行任务调用请求中事务标识对应的任务,从而得到所述任务内容的对应的任务结果,清理并释放模块(即清理任务资源),例如可以包括清洗执行任务过程使用的内存空间,进程,文件等。接着调度服务可以向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。可以理解的是,一般调用就是普通的原子操作,用完就释放全部资源,是基本的外设操作。
需要说明的是,读取配置加载模块,指的是调用方调用的时候,可能不知道实际要运行的模块在什么路径,这里通过路径找到模块,加载如内存。同时配置中一般还包含端口号如“COM1”等设备信息,用于后续调用。
初始化模块可以加载驱动的其他资源到内存,同时注册驱动向应用返回消息的通信机制,如回调,socket等。
设置环境模块,向驱动设置预先配置的端口信息等,一般是前面读取配置过程获得的,也可以是其他的来源。这也是设备有关的特殊环节,一般的应用服务不会有这个环节。
调用接口,这里是指实际的设备操作,一个调用接口对应一个原子操作,非原子操作应该是异步的。这个设计与wosa类似,同步操作都是原子操作,可以中断取消的都是异步的。如原接口设计是可以取消的read方法,那么这里调用的应该是startread方法,在发起read任务以后立即返回,结果由返回消息发送给应用。
返回消息是由设备驱动内发起的,对应用的请求,如每秒返回下载进度等,是设备交互的重要流程。发起返回消息的时机可以是事务存续的所有时刻,包括使用中、占用使用中、占用,三种状态内都可以发起。返回消息发起的次数也没有限制,只要事务存在就可以一直发送。
清理过程主要是清除调用过程创建的内存,句柄等资源,确保正确关闭设备,释放物理端口等。
释放模块主要是释放驱动模块,彻底剥离调用过程对调度进程内存的影响。加载模块如果在单独的代理进程加载,则释放的时候可以通过关闭进程彻底释放,完全隔离内存。
有些功能可能只要发送返回消息以后就可以结束了,这时候如果只看设备状态的角度,就可以释放资源退出了,但是如果从共享的角度,这时候仍然需要应用发起一次专门的调用,触发清理资源,才能让设备进入可用状态,避免共享问题。如设备下载文件,可能一次要下载很久,有些时候为了避免异常,可能会拆分为多次下载请求,分别下载文件,如果下载文件进度达到100%就退出,会导致下载任务之间由可用状态,可能会引发共享冲突问题,所以需要应用通过额外的请求专门清理资源。这个成本相对于前面提到的open和close低很多,而且相对于整个异步消息过程来说,占比也不高。
接下来,结合图5,以共享一个指令打印机为例。假设接收到的任务为打印任务,该打印任务为单页打印,每页任务都是一个单独的原子任务。在可用状态下,即没有人正在使用打印机的时候,收到任意事务标识,事务不占用的请求,表示有一个员工设备U01发起了一个单页打印的请求A1,就会进入使用中状态,表示打印机正在执行某个单页打印任务A1。实际请求操作结束返回以后,会进入可用状态。即一般的同步调用流程完成了一整个流程。表示任务A1结束。结果可以是正常打印成功,也可能是打印失败,如参数错误等,任务的结果不影响调度,此时设备可以正常进入空闲状态。具体地,客户端(即应用),向服务发送一个任务内容为单页打印且调用标识为非占用的任务调用请求,服务接收到该任务调用请求后,服务可以将所述服务的当前调用状态由可用状态调整为使用中状态,可以根据该任务内容和任务标识,先通过读取打印机配置加载打印功能模块获取配置数据,然后,通过初始化打印模块进行初始化,接着,根据设置打印信息(比如dpi等),紧接着,可以打印一页内容,清理资源并释放模块(即清理任务资源)。接着调度服务可以向所述客户端返回所述任务成功结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
接下来,介绍本申请的一种占用调用的实现方式。在本实现方式中,若服务的当前调用状态为可用状态,所述任务内容为连续执行N次同操作类型的任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数。
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,配置任务参数;对第一次的任务内容,根据所述事务标识,确定所述第一次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;
对第i次的任务内容,根据所述事务标识,将所述服务的由占用状态调整为占用使用中状态,并确定所述第i次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态,其中,i为大于1且小于N的正整数;
对第N次的任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N次的任务内容对应的任务结果,以及,清除任务资源;向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
作为一种示例,如图4所示的占用调用的工作流程,客户端(即应用)通过接口调用向调度服务发送一任务调用请求,该任务调用请求的任务内容为执行多次的任务内容,且调用标识为占用,而该调度服务的当前调用状态为可用状态。调度服务可以将所述服务的当前调用状态由可用状态调整为使用中状态,并配置任务参数,比如,可以根据该任务内容和任务标识,先通过读取配置加载模块获取配置数据,然后,通过初始化模块进行初始化,接着,根据配置数据设置环境,紧接着,可以确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容。若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,对第一次的任务内容,根据所述事务标识,确定所述第一次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;对于非第一次且非最后一次的任务内容(即除第一次的任务内容和最后一次的任务内容以外的任务内容)而言,可以根据所述事务标识,将所述服务的由占用状态调整为占用使用中状态,并通过调用接口,确定所述本次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;对最后一次的任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定本次的任务内容对应的任务结果,以及,清理资源,并释放模块;向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。可见,本实施例中,在处理多个任务的过程只需要执行一次配置任务参数,从而缩短了执行多个任务的时间,提高了执行多个任务的效率。
可以理解的是,占用调用就可以实现ic卡写卡过程中去后台校验再回来写卡的过程,这时候只要事务标识使用一个应用临时生成的完全独立的,就可以保证不会被其他应用使用。在模糊匹配的情况下,只要设置好事务标识中各个部分结构设计,就可以避免冲突。
接下来,结合图6和图7,以共享一个指令打印机为例。以共享一个指令打印机为例。打印任务为多页打印,每页任务都是一个单独的请求,或者说每页任务都是一个单独的原子任务,一个多页打印的任务是一组占用调用的单页任务组成的。打印机的用户有很多,比如一个办公室内所有员工设备共用一台打印机,在可用状态下,即没有人正在使用打印机的时候,收到任意事务标识,事务占用的请求,表示有一个员工设备U02发起了一个多页任务请求B1的第一页B1_1,记录了这个员工设备发起的任务标志标识,如工号U02,标识的选取与任务的维度有关。会进入占用使用中状态,表示打印机现在开始会接收若干页打印任务,时间会很久。其他人的任务都要直接返回“设备被U02员工设备占用中”的错误,程序不应该阻塞等待占用任务结束,因为大概率等不到,如果有其他员工设备急用,需要自行与占用设备的员工设备直接沟通,确认占用结束以后再使用打印机。使用中状态下,即打印机正在执行多页打印任务B1的最后一页B1_n。其中,每个任务都会在前一个任务进入的下一个状态中处理。实际请求操作结束返回以后,会进入可用状态。即一般的同步调用流程完成了一整个流程。表示任务B1_n结束。结果可以是正常打印成功,也可能是打印失败,如参数错误等,任务的结果不影响调度,此时设备可以正常进入空闲状态。其中,B1就是占用调用。具体地,客户端(即应用),向服务发送一个任务内容为多页打印且调用标识为占用的任务调用请求,服务接收到该任务调用请求后,服务可以将所述服务的当前调用状态由可用状态调整为占用使用中状态,可以根据该任务内容和任务标识,先通过读取打印机配置加载打印功能模块获取配置数据,然后,通过初始化打印模块进行初始化,接着,根据设置打印信息(比如dpi等),紧接着,可以打印一页内容,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;打印下一页内容时,先将所述服务的由占用状态调整为占用使用中状态,然后打印该页内容,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;依次执行,直至打印完最后一页内容时,清理资源并释放模块(即清理任务资源)。接着调度服务可以向所述客户端返回所述任务成功结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
需要说明的是,在占用调用的实现方式的基础上,介绍强制结束占用的方式,所述方法还包括:
在向所述客户端返回第j次的任务内容对应的任务结果后,接收强制结束指令;其中,j为正整数,N≥j≥1;
响应于所述强制结束指令,取消执行所述第j+1次的任务内容,以及清除任务资源;并将所述服务的当前调用状态由占用使用中状态调整为可用状态。可以理解的是,当j为N时,则直接清除任务资源以及后续操作即可。并且,强制结束占用可以在执行任意第几个任务时均可以实施,强制结束指令触发时不改变状态,结束后可设置服务的调用状态为可用状态。
可以理解的是,结束占用的过程可能会比较特殊,有时候如异步调用没有条件再发起类似于打印测试页的请求,或者占用调用中发现当前页由于缺墨没有打印完整,后续打印也无法正常执行的时候,需要不调用驱动,直接由占用状态进入可用状态,可以称为强制结束任务。强制结束任务可以通过强制触发清理资源及以后流程实现。清理资源(即清除任务资源)的时候应检查是否由异步任务正在执行,如果有,应发起异步任务取消的流程。清理资源应该阻塞等待异步任务取消的消息发送成功以后才继续执行。可通过“强制结束任务”,结束占用调用。
接下来,结合图8和图9,以共享一个指令打印机为例,具体以共享一个指令打印机为例,且打印任务为多页打印,即所述任务内容为连续执行10次打印的任务内容(即打印10页内容),所述调用标识为占用。假设在打印第5页的过程中,服务收到强制结束指令,则服务可以响应于所述强制结束指令,取消执行打印第五页的任务内容,以及清除任务资源;并将所述服务的当前调用状态由占用使用中状态调整为可用状态。
需要说明的是,在占用调用的实现方式的基础上,介绍任务合并的方式,具体地,在所述向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态之后,所述方法还包括:
若接收到另一客户端发送的任务调用请求,且所述另一客户端发送的任务调用请求中的任务内容、事务标识与所述客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别(例如打印同一样款式的收据单),则将所述另一客户端发送的任务调用请求中的任务内容、事务标识加入待处理缓存队列;
对所述另一客户端发送的任务调用请求中的任务内容,根据所述另一客户端发送的任务调用请求中的事务标识,将所述服务的当前状态由占用状态调整为占用使用中状态,并确定所述另一客户端发送的任务调用请求中的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态。
可以理解的是,若服务正在执行占用类型的任务A,任务A还没结束时,服务收到了任务B,先将任务调用请求B(即任务B)中的任务内容、事务标识加入待处理缓存队列,此时先执行完任务A再执行任务B。也就是说,任务A不受影响,等服务到进入下一个状态(比如占用状态),再根据任务B的标识和占用标志,判断能不能执行任务B。
对于可以合并的事务,需要根据实际的业务逻辑来查找,比如很多设备的读取序列号功能就可以和任意其他的请求合并,因为不需要设备做出具体的动作,不影响设备状态,所以事务标识可以设计为模糊匹配的模式,通过设计特定的字段结构,可以让读取序列号与其他所有的事务都可以合并。如读取序列号的事务标识为“001*1234”,这样就可以和所有001开头,1234结尾的事务匹配,即此时可以认为另一客户端发送的任务调用请求中的任务内容、事务标识与一客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别,则可以合并为一个事务,而001和1234则代表一些其他维度的属性如请求来源于本地还是来源于远程,应用代码之类的,区分隔离一部分事务不能与该事务合并。需要说明的是,可以合并的事务的事务标识匹配方式也可以通过其他方式进行匹配,例如,正则表达式、通配符等方式。
接下来,结合图10和图11,对任务合并进行举例说明。以某种USB密码器为例,多个应用程序(即客户端)都要通过一个密码器加密数据,供后台校验,可以合并为一组事务,而更新密码器主密钥不能与密码器加密数据请求合并,这样可以模糊匹配事务标识,如A应用加密数据的事务标识为U01_A_C105,打B应用加密数据的是事务标识为U01_B_C201,C应用密码器主密钥更新的事务标识为U01_C_U001。U01表示用户,第五位的A、B、C表示应用名,第七位的C表示加密数据,U表示更新主密钥,最后的数字为随机数。可以设置标识的模糊匹配为用户相同,第七位相同的任务可以合并,即可认为任务是同一个事务内,就可以将任务合并了。具体地,客户端(即应用),向服务发送一个任务内容为加密数据且调用标识为占用的任务调用请求,服务接收到该任务调用请求后,服务可以将所述服务的当前调用状态由可用状态调整为占用使用中状态,可以根据该任务内容和任务标识,先通过读取配置加载驱动模块获取配置数据,然后,通过初始化驱动模块进行初始化,接着,根据设置信息(比如dpi等),紧接着,可以进行加密数据,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;若接收到另一客户端发送的任务调用请求,且所述另一客户端发送的任务调用请求中的任务内容、事务标识与所述客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别,则将所述另一客户端发送的任务调用请求中的任务内容、事务标识加入待处理缓存队列;在执行完前一加密数据的任务后,对所述另一客户端发送的任务调用请求中的加密数据的任务内容,根据所述另一客户端发送的任务调用请求中的事务标识,将所述服务的当前状态由占用状态调整为占用使用中状态,并确定所述另一客户端发送的任务调用请求中的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态。直至执行完待处理缓存队列中的任务。这样在可能出现的高并发情况下,本机的多个应用之间互相无法知道对方的应用名,无法知道对方的随机数,所以无法完全匹配其他应用的事务标识,但是只要所有的加密数据请求都以占用方式请求,就可以避免频繁的打开关闭密码器。密码器更新主密钥的时候,发起更新请求,如果返回设备占用中,只要先强制结束占用再重试即可。实现了设备资源的抢占式调度,提高了设备的使用效率。需要其强调的是,图11对应的例子为同步任务合并过程,可以理解的是,对于同步任务合并,所有调用服务的客户端都可以在同一个进程中,这样,就不需要涉及网络通信或进程间通信,也可以在同一个终端的不同进程内,就要使用进程间通信,也可以在不同终端内,就涉及网络通信。所有任务也可以在同一个线程内顺序执行。
而任务合并还包括异步任务合并的方式,异步任务合并的方式中,所有调用服务的客户端不一定在同一个终端的同一个进程中。所有调用服务的客户端可能在不同的终端,也可能在同一个终端的不同进程中,这样,会涉及网络通信或进程间通信。假设A、B、C三个客户端在同一个终端的不同进程内,那么请求会涉及进程间通信,实际调度操作设备的模块可能为单独的一个进程,应用进程通过进程间通信的方式像调度模块发送调用设备的请求,但是,对于调度的机制本身没有什么影响。接下来,结合图12,对异步任务合并的方式进行举例说明,具体地,客户端A(即应用A),向服务发送一个任务内容为加密数据且调用标识为占用的任务调用请求,服务接收到该任务调用请求后,服务可以将所述服务的当前调用状态由可用状态调整为占用使用中状态,可以根据该任务内容和任务标识,先通过读取配置加载驱动模块获取配置数据,然后,通过初始化驱动模块进行初始化,接着,根据设置信息(比如dpi等),紧接着,将该加密数据向驱动内线程X发送,驱动内线程X可以进行加密数据,向客户端A返回加密结果消息,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;若接收到另一客户端B发送的任务调用请求,且所述另一客户端发送的任务调用请求中的任务内容、事务标识与所述客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别,则将所述另一客户端B发送的任务调用请求中的任务内容、事务标识加入待处理缓存队列;对所述另一客户端B发送的任务调用请求中的加密数据的任务内容,根据所述另一客户端发送的任务调用请求中的事务标识,将所述服务的当前状态由占用状态调整为占用使用中状态,并将该加密数据向驱动内线程Y发送,驱动内线程Y可以进行加密数据,向客户端B返回加密结果消息,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;可见,客户端A、B分别对应单独的一个进程,两者的调用服务之间并不存在任何影响。
还需要说明的是,如果驱动库的异步方法是线程安全的,那么异步任务之间可以合并,同时还可以合并一个同步占用任务。即某一时刻,可以有最多一个同步占用任务和若干异步任务并发。如图12对应的例子所示,假设某加密设备可以并发加密多个体积很大的数据,加密过程时间长,是异步任务,是线程安全的,调度方案可以支持多个任务并发,同时还可以支持一个同步占用任务与其他异步任务并发,如读取设备信息。
可见本实施例中,将多任务合并处理后,不需要对于每个任务均执行一次配置任务参数和清除任务资源,而是整个多个任务合并处理过程中仅执行一次配置任务参数和一次清除任务资源,这样,本实施例便可以通过事务表示的模糊匹配,就可以极大的改善并发性能,提高使用效率。
接下来,介绍本申请的一种异步调用的方式。在本实现方式中,若服务的当前调用状态为可用状态,所述任务内容为执行不同操作类型的N个任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的不同操作类型的N个任务内容,配置任务参数;
对第一个任务内容,开始根据所述事务标识,执行所述第一个任务内容时,将所述服务的当前调用状态由占用使用中状态调整为占用状态;根据所述事务标识,执行所述第一个任务内容的过程中,向所述客户端返回实时消息;确定所述第一个任务内容对应的第一任务结果,向所述客户端返回所述第一任务结果;
对第P个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为占用使用中状态,确定所述第P个任务内容对应的第P任务结果,向所述客户端返回所述第P任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,P为大于1且小于N的正整数;
对所述第N个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N个任务内容对应的第N任务结果,以及,清除任务资源;向所述客户端返回所述第N任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
作为一种示例,如图4所示的异步调用的工作流程,对不同操作类型的多个任务内容中的第一个任务内容,服务可以将所述服务的当前调用状态由占用使用中状态调整为占用状态开始根据所述事务标识,并配置任务参数,比如,可以根据该任务内容和任务标识,先通过读取配置加载模块获取配置数据,然后,通过初始化模块进行初始化,接着,根据配置数据设置环境,紧接着,通过调用接口调用服务执行所述第一个任务内容;其中,根据所述事务标识,执行所述第一个任务内容的过程中,可以向所述客户端返回实时消息(例如可以为进度消息或者其他消息);确定所述第一个任务内容对应的第一任务结果,向所述客户端返回所述第一任务结果;对不同操作类型的多个任务内容中的第二个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为占用使用中状态,通过调用接口调用服务,以确定所述第2个任务内容对应的第2任务结果,向所述客户端返回所述第2任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;依次类推,对不同操作类型的多个任务内容中的最后一个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并通过调用接口调用服务,确定所述最后一个任务内容对应的最后一个任务结果,以及,清除任务资源(比如清理资源和释放模块);向所述客户端返回最后一个任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
接下来,结合图13和图14,对异步调用进行举例说明。如某操作时间会特别长,比如给一台打印机更新固件。打印机芯片性能一般很差,整体执行过程可能要几分钟甚至几十分钟。更新过程本身可能是原子操作,即更新失败打印机应恢复到原来的固件版本,但是这个原子操作的维度是打印机硬件控制的,大部分应用一般不会阻塞等待几十分钟,而是开始传输以后,继续执行其他的操作。待任务结束以后得到成功的通知消息,就可以让设备恢复可用状态了。更新过程中,其他用户可能不知道这台打印机正在更新固件,会发起打印请求,由于这里是占用调用的,会立即返回“设备被xx占用”错误,可以避免影响设备固件更新过程。更新成功之前如果本用户使用本任务的事务标识做其他请求,可以成功调用到设备驱动。异步线程本身就是驱动内创建的,所以驱动内对于线程运行过程中的安全控制应该考虑此时收到其他请求的情况,如取消当前异步任务,发起其他并行任务,操作控制当前异步任务。而本用户一定已知设备正在执行异步操作的过程中,所以用户和驱动内部都有条件保障异步任务的正确执行。具体地,对第一操作类型的任务内容(即更新打印机固件),调用标识为占用,服务可以将所述服务的当前调用状态由占用使用中状态调整为占用状态开始根据所述事务标识,并配置任务参数,比如,可以根据该任务内容和任务标识,先通过读取打印机配置加载模块获取配置数据,然后,通过初始化打印功能模块进行初始化,接着,设置打印信息(如dpi),紧接着,通过调用接口调用服务开始更新打印机固件;其中,根据所述事务标识,执行所述第一操作类型的任务内容的过程中,可以向所述客户端返回实时消息(例如实时更新进度);确定所述第一操作类型的任务内容对应的第一任务结果(即更新成功),向所述客户端返回所述第一任务结果;对第二操作类型的任务内容(即打印一页内容),根据其事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并通过调用接口调用服务,打印该页内容,以及,清除任务资源(比如清理资源和释放模块);向所述客户端返回最后一个任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
需要说明的是,在异步调用的实现方式的基础上,介绍异步取消的方式,具体地,所述方法还包括:
若1≤Y<N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为占用使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,Y为正整数;
若Y为N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;清除任务资源;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
接下来,结合图15和图16,对异步取消进行举例说明。假设服务正在执行更新打印机固件的过程中,即在确定第1个任务内容(即更新打印机固件)对应的第1任务结果,向所述客户端返回所述第1任务结果之前,若接收到针对所述第1个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为使用中状态,取消执行所述更新打印机固件的任务内容,以及确定第2个任务内容(比如打印一页内容)对应的第2任务结果;清除任务资源;向所述客户端返回所述第1个任务内容的取消成功结果,以及向所述客户端返回所述第2任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
要说明的是,在异步调用的实现方式的基础上,介绍强制结束异步的方式,具体地,所述方法还包括:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之后,若接收到强制结束指令,响应于所述强制结束指令,清除任务资源;将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
接下来,结合图17和图18,对强制结束异步进行举例说明。假设服务正在执行更新打印机固件的过程中,即在确定第1个任务内容(即更新打印机固件)对应的第1任务结果,向所述客户端返回所述第1任务结果之后,若接收到强制结束指令,此时,不改变服务的当前调用状态,以及响应于所述强制结束指令,直接清除任务资源,例如清理资源和释放模块,而不需要通知驱动内线程;清除任务资源结束后,将所述服务的当前调用状态由占用状态调整为可用状态。
需要说明的是,在异步调用的实现方式的基础上,介绍强制结束取消异步的方式,具体地,所述方法还包括:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到强制取消指令,响应于所述强制取消指令,清除任务资源;向所述客户端返回取消成功结果,并将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
接下来,结合图19和图20,对强制结束取消异步进行举例说明。假设服务正在执行更新打印机固件的过程中,即在确定第1个任务内容(即更新打印机固件)对应的第1任务结果,向所述客户端返回所述第1任务结果之前,若接收到强制取消指令,此时,不改变服务的当前调用状态,以及响应于所述强制取消指令,通知驱动内线程取消执行当前任务(即更新打印机固件),驱动内线程取消执行当前任务后,驱动内线程向所述客户端返回异步消息更新被取消的消息,并且驱动内线程通知服务清除任务资源(即清理资源和释放模块);服务清除任务资源结束后,服务向所述客户端返回取消成功结果,并将所述服务的当前调用状态由占用状态调整为可用状态。
由上述技术方案可以看出,本申请提供了一种调用服务的方法,所述方法应用于服务侧,所述服务侧包括服务,所述方法可以包括:获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。这样,在本实施例中,任何客户端均可以通过在任务调用请求中设置事务标识和调用标识,便可以利用事务标识和调用标识对服务侧中的服务进行调用,这样,便实现了设备的共享,支持复杂的服务调用功能流程,从而可以将服务调度方案完全交给客户端控制,十分灵活,不需要应用专门开发调度模块,只要根据实际的调用情况配置事务标识和调用标识即可,也降低了交互次数和复杂度,并且不需要和传统方式一样,需要人工操作服务的调用任务排队,可以避免由于人工操作服务的调用任务排队所导致的调用错误,从而提高了调用服务的效率。
如图21所示,为本申请所述一种调用服务的装置的一个具体实施例。本实施例所述装置,即用于执行上述实施例所述方法的实体装置。所述装置应用于服务侧,所述服务侧包括服务,其技术方案本质上与上述实施例一致,本实施例中所述装置包括:
一种调用服务的装置,所述装置包括:
请求获取单元2201,用于获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;
调用确定单元2202,用于根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;
结果确定单元2203,用于根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。
可选的,若服务的当前调用状态为可用状态,所述任务内容为执行一次的任务内容,所述调用标识为非占用;
所述调用确定单元2202,具体用于:
将所述服务的当前调用状态由可用状态调整为使用中状态,并配置任务参数,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容;
所述结果确定单元2203,具体用于:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,根据所述事务标识,执行一次所述事务标识对应的任务内容,得到所述任务内容的对应的任务结果,以及,清除任务资源;
向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,若服务的当前调用状态为可用状态,所述任务内容为连续执行N次同操作类型的任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述调用确定单元2202,具体用于:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述结果确定单元2203,具体用于:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,配置任务参数;对第一次的任务内容,根据所述事务标识,确定所述第一次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;
对第i次的任务内容,根据所述事务标识,将所述服务的由占用状态调整为占用使用中状态,并确定所述第i次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态,其中,i为大于1且小于N的正整数;
对第N次的任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N次的任务内容对应的任务结果,以及,清除任务资源;向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述装置还包括强制结束单元,用于:
在向所述客户端返回第j次的任务内容对应的任务结果后,接收强制结束指令;其中,j为正整数;
响应于所述强制结束指令,取消执行所述第j+1次的任务内容,以及清除任务资源;并将所述服务的当前调用状态由占用使用中状态调整为可用状态。
可选的,所述装置还包括任务合并单元,用于:
在所述向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态之后,若接收到另一客户端发送的任务调用请求,且所述另一客户端发送的任务调用请求中的任务内容、事务标识与所述客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别,则将所述另一客户端发送的任务调用请求中的任务内容、事务标识加入待处理缓存队列;
对所述另一客户端发送的任务调用请求中的任务内容,根据所述另一客户端发送的任务调用请求中的事务标识,将所述服务的当前状态由占用状态调整为占用使用中状态,并确定所述另一客户端发送的任务调用请求中的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态。
可选的,若服务的当前调用状态为可用状态,所述任务内容为执行不同操作类型的N个任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述调用确定单元2202,具体用于:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的不同操作类型的N个任务内容,配置任务参数;
对第一个任务内容,开始根据所述事务标识,执行所述第一个任务内容时,将所述服务的当前调用状态由占用使用中状态调整为占用状态;根据所述事务标识,执行所述第一个任务内容的过程中,向所述客户端返回实时消息;确定所述第一个任务内容对应的第一任务结果,向所述客户端返回所述第一任务结果;
对第P个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为占用使用中状态,确定所述第P个任务内容对应的第P任务结果,向所述客户端返回所述第P任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,P为大于1且小于N的正整数;
对所述第N个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N个任务内容对应的第N任务结果,以及,清除任务资源;向所述客户端返回所述第N任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述装置还包括异步调用单元,用于:
若1≤Y<N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为占用使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,Y为正整数;
若Y为N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;清除任务资源;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
可选的,所述装置还包括强制结束异步单元,用于:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之后,若接收到强制结束指令,响应于所述强制结束指令,清除任务资源;将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
可选的,所述装置还包括强制结束异步单元,用于:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到强制取消指令,响应于所述强制取消指令,清除任务资源;向所述客户端返回取消成功结果,并将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
可选的,若所述服务的当前调用状态为占用使用中状态,所述装置还包括第一单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为占用状态,所述装置还包括第二单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为使用中状态,所述装置还包括第三单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示。
可选的,若所述服务的当前调用状态为可用状态,所述装置还包括第四单元,用于:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行非占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,对所述另一任务调用请求进行非占用使用。
图22是本申请实施例提供的一种电子设备的结构示意图。在硬件层面,该电子设备包括处理器,可选地还包括内部总线、网络接口、存储器。其中,存储器可能包含内存,例如高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器等。当然,该电子设备还可能包括其他业务所需要的硬件。
处理器、网络接口和存储器可以通过内部总线相互连接,该内部总线可以是ISA(Industry StandardArchitecture,工业标准体系结构)总线、PCI(Peripheral ComponentInterconnect,外设部件互连标准)总线或EISA(Extended IndustryStandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图22中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器,用于存放执行指令。具体地,执行指令即可被执行的计算机程序。存储器可以包括内存和非易失性存储器,并向处理器提供执行指令和数据。
在一种可能实现的方式中,处理器从非易失性存储器中读取对应的执行指令到内存中然后运行,也可从其它设备上获取相应的执行指令,以在逻辑层面上形成终端的程序运行装置。处理器执行存储器所存放的执行指令,以通过执行的执行指令实现本申请任一实施例中提供的终端的程序运行方法。
上述如本申请图2所示实施例提供的终端的程序运行装置执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable GateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
本申请实施例还提出了一种可读介质,该可读存储介质存储有执行指令,存储的执行指令被电子设备的处理器执行时,能够使该电子设备执行本申请任一实施例中提供的终端的程序运行方法,并具体用于执行上述终端的程序运行所述的方法。
前述各个实施例中所述的电子设备可以为计算机。
本领域内的技术人员应明白,本申请的实施例可提供为方法或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例,或软件和硬件相结合的形式。
本申请中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (16)
1.一种调用服务的方法,其特征在于,所述方法应用于服务侧,所述服务侧包括服务,所述方法包括:
获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;
根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;
根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。
2.根据权利要求1所述的方法,其特征在于,若服务的当前调用状态为可用状态,所述任务内容为执行一次的任务内容,所述调用标识为非占用;
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为使用中状态,并配置任务参数,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,根据所述事务标识,执行一次所述事务标识对应的任务内容,得到所述任务内容的对应的任务结果,以及,清除任务资源;
向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
3.根据权利要求1所述的方法,其特征在于,若服务的当前调用状态为可用状态,所述任务内容为连续执行N次同操作类型的任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,配置任务参数;对第一次的任务内容,根据所述事务标识,确定所述第一次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;
对第i次的任务内容,根据所述事务标识,将所述服务的由占用状态调整为占用使用中状态,并确定所述第i次的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态,其中,i为大于1且小于N的正整数;
对第N次的任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N次的任务内容对应的任务结果,以及,清除任务资源;向所述客户端返回所述任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在向所述客户端返回第j次的任务内容对应的任务结果后,接收强制结束指令;其中,j为正整数;
响应于所述强制结束指令,取消执行所述第j+1次的任务内容,以及清除任务资源;并将所述服务的当前调用状态由占用使用中状态调整为可用状态。
5.根据权利要求3所述的方法,其特征在于,在所述向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态之后,所述方法还包括:
若接收到另一客户端发送的任务调用请求,且所述另一客户端发送的任务调用请求中的任务内容、事务标识与所述客户端发送的任务调用请求中的任务内容、事务标识为同一操作级别,则将所述另一客户端发送的任务调用请求中的任务内容、事务标识加入待处理缓存队列;
对所述另一客户端发送的任务调用请求中的任务内容,根据所述另一客户端发送的任务调用请求中的事务标识,将所述服务的当前状态由占用状态调整为占用使用中状态,并确定所述另一客户端发送的任务调用请求中的任务内容对应的任务结果,向所述客户端返回所述任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态。
6.根据权利要求1所述的方法,其特征在于,若服务的当前调用状态为可用状态,所述任务内容为执行不同操作类型的N个任务内容,所述调用标识为占用,其中,N为大于或等于2的正整数;
所述根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果,包括:
将所述服务的当前调用状态由可用状态调整为占用使用中状态,以及确定所述事务标识对应的调用结果为执行所述事务标识对应的任务内容,并且,保存所述事务标识;
所述根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果,包括:
若所述事务标识对应的调用结果为执行所述事务标识对应的不同操作类型的N个任务内容,配置任务参数;
对第一个任务内容,开始根据所述事务标识,执行所述第一个任务内容时,将所述服务的当前调用状态由占用使用中状态调整为占用状态;根据所述事务标识,执行所述第一个任务内容的过程中,向所述客户端返回实时消息;确定所述第一个任务内容对应的第一任务结果,向所述客户端返回所述第一任务结果;
对第P个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为占用使用中状态,确定所述第P个任务内容对应的第P任务结果,向所述客户端返回所述第P任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,P为大于1且小于N的正整数;
对所述第N个任务内容,根据所述事务标识,将所述服务的当前调用状态由占用状态调整为使用中状态,并确定所述第N个任务内容对应的第N任务结果,以及,清除任务资源;向所述客户端返回所述第N任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
若1≤Y<N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为占用使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由占用使用中状态调整为占用状态;其中,Y为正整数;
若Y为N-1,在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到针对所述第Y个任务内容的取消指令,响应于所述取消指令,将所述服务的当前调用状态由占用状态调整为使用中状态,取消执行所述Y个任务内容,以及确定第Y+1个任务内容对应的第Y+1任务结果;清除任务资源;向所述客户端返回所述第Y个任务内容的取消成功结果,以及向所述客户端返回所述第Y+1任务结果,并将所述服务的当前调用状态由使用中状态调整为可用状态。
8.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之后,若接收到强制结束指令,响应于所述强制结束指令,清除任务资源;将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
9.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在确定第Y个任务内容对应的第Y任务结果,向所述客户端返回所述第Y任务结果之前,若接收到强制取消指令,响应于所述强制取消指令,清除任务资源;向所述客户端返回取消成功结果,并将所述服务的当前调用状态由占用状态调整为可用状态;其中,1≤Y≤N,且Y为正整数。
10.根据权利要求1-9中任一所述的方法,其特征在于,若所述服务的当前调用状态为占用使用中状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
11.根据权利要求1-9中任一所述的方法,其特征在于,若所述服务的当前调用状态为占用状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则向所述另一客户端返回错误提示。
12.根据权利要求1-9中任一所述的方法,其特征在于,若所述服务的当前调用状态为使用中状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,则将所述另一任务调用请求加入待处理缓存队列,以及若所述另一任务调用请求的缓存时长大于预设阈值,则向所述另一客户端返回错误提示。
13.根据权利要求1-9中任一所述的方法,其特征在于,若所述服务的当前调用状态为可用状态,所述方法还包括:
接收另一客户端发送的另一任务调用请求;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为占用,则对所述另一任务调用请求进行占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识相同,所述另一任务调用请求的调用标识为非占用,则对所述另一任务调用请求进行非占用使用;
若所述另一任务调用请求的事务标识与所述任务调用请求中的事务标识不相同,所述另一任务调用请求的调用标识为非占用,对所述另一任务调用请求进行非占用使用。
14.一种调用服务的装置,其特征在于,所述装置应用于服务侧,所述服务侧包括服务,所述装置包括:
请求获取单元,用于获取客户端发送的任务调用请求,其中,所述任务调用请求包括任务内容、事务标识和调用标识;
调用确定单元,用于根据所述服务的当前调用状态以及所述调用标识,确定所述事务标识对应的调用结果;
结果确定单元,用于根据所述调用结果,确定所述任务内容对应任务结果,并向所述客户端返回所述任务结果。
15.一种电子设备,其特征在于,包括:处理器和存储器,所述存储器用于存储程序;所述处理器用于运行所述程序,以实现权利要求1-3任一项所述的终端的程序运行方法。
16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行权利要求1-13任一项所述的终端的程序运行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110811737.1A CN113535339B (zh) | 2021-07-19 | 2021-07-19 | 一种调用服务的方法以及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110811737.1A CN113535339B (zh) | 2021-07-19 | 2021-07-19 | 一种调用服务的方法以及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113535339A true CN113535339A (zh) | 2021-10-22 |
CN113535339B CN113535339B (zh) | 2022-06-17 |
Family
ID=78100108
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110811737.1A Active CN113535339B (zh) | 2021-07-19 | 2021-07-19 | 一种调用服务的方法以及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113535339B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8739176B1 (en) * | 2010-03-05 | 2014-05-27 | Sumner E. Darling | Task-driven multitasking method that constrains task suspension to task preemption |
CN106844055A (zh) * | 2017-01-25 | 2017-06-13 | 北京百分点信息科技有限公司 | 一种任务的执行方法和装置 |
CN110324262A (zh) * | 2018-03-30 | 2019-10-11 | 华为技术有限公司 | 一种资源抢占的方法及装置 |
CN110825539A (zh) * | 2019-11-07 | 2020-02-21 | 中国联合网络通信集团有限公司 | 业务处理方法及装置 |
CN110895484A (zh) * | 2018-09-12 | 2020-03-20 | 北京奇虎科技有限公司 | 任务调度方法及装置 |
CN111694649A (zh) * | 2020-06-12 | 2020-09-22 | 北京字节跳动网络技术有限公司 | 资源调度方法、装置、计算机设备和存储介质 |
-
2021
- 2021-07-19 CN CN202110811737.1A patent/CN113535339B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8739176B1 (en) * | 2010-03-05 | 2014-05-27 | Sumner E. Darling | Task-driven multitasking method that constrains task suspension to task preemption |
CN106844055A (zh) * | 2017-01-25 | 2017-06-13 | 北京百分点信息科技有限公司 | 一种任务的执行方法和装置 |
CN110324262A (zh) * | 2018-03-30 | 2019-10-11 | 华为技术有限公司 | 一种资源抢占的方法及装置 |
CN110895484A (zh) * | 2018-09-12 | 2020-03-20 | 北京奇虎科技有限公司 | 任务调度方法及装置 |
CN110825539A (zh) * | 2019-11-07 | 2020-02-21 | 中国联合网络通信集团有限公司 | 业务处理方法及装置 |
CN111694649A (zh) * | 2020-06-12 | 2020-09-22 | 北京字节跳动网络技术有限公司 | 资源调度方法、装置、计算机设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113535339B (zh) | 2022-06-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4323512B2 (ja) | 画像処理装置および画像処理システム | |
US7058950B2 (en) | Callback event listener mechanism for resource adapter work executions performed by an application server thread | |
US20100103453A1 (en) | Printing system and control method of the printing system | |
US20060092834A1 (en) | Application flow control apparatus | |
JPH06230908A (ja) | 各種ページ記述言語ならびにその他のパラメータを用いて電子化文書の印刷を制御するためのシステム | |
TWI460659B (zh) | 用於降低競爭之鎖定窗 | |
WO2008101756A1 (en) | Method and system for concurrent message processing | |
CN114253673A (zh) | 一种分布式系统的事务处理方法和事务处理装置 | |
JP2000085210A (ja) | プリンタ及び印刷方法 | |
US11385846B2 (en) | Printing system, server, and printing method | |
US5592673A (en) | Loosely coupled compound computer system using lock and semaphore mechanism for performing exclusive control of shared resource which is accessed through a distinct bus | |
CN110532106A (zh) | 进程间的通讯方法、装置、设备和存储介质 | |
CN113535339B (zh) | 一种调用服务的方法以及装置 | |
US7924447B2 (en) | Method and system for workload balancing | |
US20160155093A1 (en) | Image-forming-apparatus control system, control method, and computer program product | |
CN114119129A (zh) | 一种高并发秒杀系统 | |
CN117311939A (zh) | 一种客户端请求的处理方法、计算设备及存储介质 | |
CN112596871A (zh) | 业务处理方法和装置 | |
JP4120469B2 (ja) | Posシステムの印刷制御装置、イメージデータの登録方法、及びイメージデータの初期化方法 | |
KR100874403B1 (ko) | 논 블록킹 입출력을 이용한 서버의 쓰레드 관리 방법 및시스템 | |
CN108241616A (zh) | 消息推送方法和装置 | |
CN116346728A (zh) | 低代码平台限流方法及装置 | |
US7603448B2 (en) | System and method for managing client processes | |
KR101980565B1 (ko) | 조판 생성 방법 및 인쇄 시스템 | |
JP7135648B2 (ja) | 中継システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |