基于go语言的动态切图系统的制作方法_2

文档序号:9751004阅读:来源:国知局
一个切图进程。
[0031]本实施例的系统中,负载均衡模块、切图模块、守护模块之间采用http协议进行通
?目O
[0032]以下举例简述本实施例的系统中切图模块创建的切图进行如何进行具体的处理。
[0033]参考图2所示,切图进程大致依据以下步骤进行处理:
[0034]步骤101、创建新的GO协程,记为协程2,来处理该请求,请求的URL格式:
[0035]域名/频道名/图片名_切图指令1_切图参数1_切图指令2_切图参数2……_切图命令~_切图参数N.图片格式;
[0036]步骤102、解析请求URL中的图片名称以及切图指令和参数,然后对图片名称进行解码,并按照所述上传模块I中同样的方式生成一个新的校验码与解码出的校验码进行比较,以拦截校验不成功的URL。接着向所述管理系统2中查询切图参数是否合法,以挡掉参数不合法的URL;
[0037]步骤103、由于校验成功的图片名称已包含所述上传模块I插入数据库记录的索引信息,因此可直接查询获取实际的存储路径,并取得图片;
[0038]步骤104、创建一个容量为I的布尔类型channel,记为channel_2,将channel_2,步骤102中解析的切图命令和参数,步骤103中取得的图片内存首地址,以及当前时间打包在一个结构体中放入切图协程I监听的channe 1_1。当前协程2读取布尔类型的channe 1_2,以阻塞当前协程;
[0039]步骤105、所述切图协程I从channel_l中读取步骤104中插入的结构体,首先计算当前时间与结构体创建时间的时间差,当时间差超过自己设定的限值时,可认为当前请求已经失效,并向结构体中布尔型channel_2写入False信息,将超时错误信息写入实时监控模块6,然后从channe 1_1中读取下一个结构体;当时间差未超过限值时,协程I按照结构体中切图的命令和参数,利用cgo[6](—种GO语言调用C语言的工具)调用GraphicSMagick[7]和ImageMagick[8]等图片处理库对图片进行处理,并用处理好的图片替换结构体中的原图,然后向channel_2写入True信息;
[0040 ] 步骤106、由于步骤1 5已向channe 1_2中写入数据,步骤104中阻塞的协程2将恢复运行,并读取channel_2中数据,数据为False时,直接返回错误信息;否则,将步骤105中切图处理后的图片返回给用户。
[0041]在上述过程中,守护进程监听在一端口,所述切图模块中的各个切图进程会定时向该端口发送心跳信息,内容包括分配内存的情况,堆栈的使用信息以及GC相关的信息。当守护进程在两个周期内未收到某个切图进程发送的心跳时,将终止该进程,并重新开启一个新的切图进程。
[0042]虽然以上描述了本发明的【具体实施方式】,但是本领域的技术人员应当理解,这些仅是举例说明,本发明的保护范围是由所附权利要求书限定的。本领域的技术人员在不背离本发明的原理和实质的前提下,可以对这些实施方式做出多种变更或修改,但这些变更和修改均落入本发明的保护范围。
【主权项】
1.一种基于GO语言的动态切图系统,其特征在于,包括图片上传模块、管理模块、负载均衡模块、切图模块、守护模块和实时监控模块; 图片上传模块用于获取原始图片并将其上传至图片存储系统; 管理模块用于接受用户登录及输入配置信息; 负载均衡模块用于获取用户请求并将用户请求分发给切图模块进行处理,以及从切图模块获取处理结果并将处理结果输出给用户; 切图模块用于接收负载均衡模块分发的用户请求,并解析用户请求中的URL中含有的原图名称和切图指令,然后向数据库查询原图的存储地址并读取原图,根据解析得到切图指令,利用集成的图片处理库对图片进行处理,最后将处理好的图片返回至负载均衡模块; 守护模块用于接收切图模块发送的状态信息,并向实时监控模块反馈其他各个模块的运行状态,运行状态包括当前执行的任务、任务的完成进度以及错误信息; 实时监控模块用于监控其他各个模块的运行状态。2.如权利要求1所述的动态切图系统,其特征在于,负载均衡模块还用于采用正则表达式对用户请求中的URL的格式进行校验,并拦截格式不合法的用户请求。3.如权利要求1所述的动态切图系统,其特征在于,切图模块根据动态切图系统中的(PU核数创建同等数量的线程。4.如权利要求1所述的动态切图系统,其特征在于,切图模块还用于从URL中解析出图片名称,然后通过计算比较校验码的方式来辨别是否是合法的图片名称,并拒绝处理不合法的图片。5.如权利要求1所述的动态切图系统,其特征在于,切图模块为每个切图线程创建有一个专用图片处理的协程,并监听一个channel,若其他协程获得图片,则将图片内存首地址和处理命令打包好放入该个channel中,所有切图协程根据预设顺序从该个管道channel中取出数据并进行处理。6.如权利要求1所述的动态切图系统,其特征在于,守护模块还用于创建守护进程,切图模块还用于在进行切图的过程期间定时向守护进程发送心跳信息,守护模块还用于在守护进程在预设的第一时长的时间段内未收到切图进程的心跳数据包时,将相应的切图进程终止,并重新创建一个切图进程。7.如权利要求1-6中任意一项所述的动态切图系统,其特征在于,负载均衡模块、切图模块、守护模块之间采用http协议进行通信。
【专利摘要】本发明公开了一种基于GO语言的动态切图系统。所述系统包括图片上传模块、管理模块、负载均衡模块、切图模块、守护模块和实时监控模块。图片上传模块用于获取原始图片并上传;管理模块用于接受用户登录及输入配置信息;负载均衡模块用于将用户请求分发给切图模块进行处理及将处理结果输出给用户;切图模块用于解析用户请求、读取原图以及处理图片;守护模块用于获取切图模块的状态信息并向实时监控模块进行反馈,以便实时监控模块监控系统中各个模块的运行状态。本发明大大节省了存储资源并提高了灵活性,能够最大程度利用服务器CPU资源来获得高性能并提高处理效率,并通过全面的监控进一步提高了动态切图的可靠性。
【IPC分类】G06F17/30
【公开号】CN105512329
【申请号】CN201510990406
【发明人】胡健, 管春涛, 吴骋成, 杨振宏
【申请人】上海携程商务有限公司
【公开日】2016年4月20日
【申请日】2015年12月24日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1