一种非阻塞获取域名IP地址的方法与系统技术方案

技术编号:14697640 阅读:83 留言:0更新日期:2017-02-24 02:51
本发明专利技术公开一种非阻塞获取域名IP地址的方法与系统,本发明专利技术方法包括:通过主进程获取域名解析请求;主进程创建子进程;子进程调用gethostbyname()函数以获取域名对应IP地址;主进程监控子进程是否获取到IP地址,若获取到则继续运行,若未获取到则主进程等待预设时间后停止等待。本发明专利技术采用主子进程的方式,将容易阻塞的gethostbyname()函数放入子进程中,使用者可以通过控制主进程的等待时间进而控制整个进程的等待时间。当发生阻塞时,无需等到gethostbyname()函数30秒响应时间到了再退出进程。

【技术实现步骤摘要】

本专利技术属于通信
,尤其涉及一种非阻塞获取域名IP地址的方法与系统
技术介绍
目前互联网上的资源地址以统一资源定位符(URL)来标识,URL也被称为网页地址,其为因特网上标准的资源地址,URL通常以域名的方式体现。域名是指由一串用点分隔的名字组成的因特网上的某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。用户在访问网络上的资源时,资源地址通常以URL的形式表达,而URL中的域名则表示了服务器所在的地址,但是,服务器在网络上一般使用IP地址来表示其地址。获取域名对应的IP地址可称为域名解析。在对包含域名的URL网络请求进行处理时,通常要进行域名解析以获取该域名对应的IP地址。例如查询www.sina.com.cn对应的IP地址时,服务器得到查询请求后,调用库函数gethostbyname()将域名对应的IP地址返回给客户端。但若调用库函数gethostbyname()短时间不能得到服务器响应的话,它不会立刻退出,而是一直等待,直到超时退出,此过程耗时约30秒。其导致页面长时间等待,无法响应用户的操作。并且gethostbyname()函数是linux库函数,通用性较强,不方便对其进行修改。现有技术中为解决域名解析时的阻塞问题,公开了多种解决方案。例如,公开号为CN103581349A的中国专利“一种域名解析方法及装置”,其在域名解析模块上建立两个以上用于域名解析的线程,当有解析请求时,则从多个线程中选择一个可用的。当所有的线程都不可用时,则新建一个或者进入等候队列。此举虽然降低了解析过程中的阻塞率,降低了网页假死概率,但是由于需要建立多个线程,无疑加大了服务器负担。又如,公开号为CN104683501A的中国专利“一种域名解析方法以及装置”,其通过设置域名缓冲表,当有域名解析请求时,先检查本地域名缓冲表内是否存在对应的解析信息,若有则直接返回解析信息,若无才向服务器请求对应的解析信息,以节省域名解析时间。但是,此种方案加大了本地客户端的负担,需额外设置域名缓冲表。
技术实现思路
本专利技术所要解决的技术问题是针对现有技术的上述不足,提出一种采用主子进程的方式获取域名地址,将实际获取域名地址的gethostbyname()函数放在子进程中,而主进程可以控制子进程的关闭进而缩短页面等待时间的非阻塞获取域名IP地址的方法。本专利技术的另一目的是提供一种非阻塞获取域名IP地址的系统。本专利技术解决其技术问题采用的技术方案如下:一种非阻塞获取域名IP地址的方法,其包括如下具体步骤:通过主进程获取域名解析请求;主进程创建子进程;子进程调用gethostbyname()函数以获取域名对应IP地址;主进程监控子进程是否获取到IP地址,若获取到,则继续运行,若未获取到,则主进程等待预设时间后停止等待。进一步地,所述主进程通过调用fork()函数创建子进程。进一步地,所述子进程获取到IP地址后将IP地址写入预设文件中,主进程检测该预设文件是否有内容进而判断子进程是否获取到IP地址。进一步地,所述子进程获取到IP地址后创建IP地址文件,主进程监测是否存在IP地址文件进而判断子进程是否获取到IP地址。进一步地,所述主进程停止等待后,子进程超时退出。进一步地,所述主进程停止等待后,子进程被主进程删除。本专利技术还提供一种非阻塞获取域名IP地址的系统,本专利技术的系统具体包括如下单元:主进程创建单元,用于创建访问域名的主进程;子进程创建单元,通过主进程创建子进程;IP地址获取单元,通过子进程调用gethostbyname()函数以获取域名对应IP地址。进一步地,还包括监控单元,主进程通过监控单元监控子进程是否获取到IP地址,若获取到,则继续运行,若未获取到,则主进程等待预设时间后停止等待。进一步地,所述子进程创建单元为fork()函数,主进程通过fork()函数创建子进程。进一步地,还包括IP地址写入文件,所述子进程获取IP地址后写入IP地址写入文件,所述监控单元监控IP地址写入文件是否存在内容。进一步地,还包括子进程删除单元,用于当主进程停止等待后删除由该主进程创建的子进程。本专利技术技术方案采用主子进程的方式获取域名地址,将实际获取域名地址的gethostbyname()函数放在子进程中,而主进程可以控制子进程的关闭进而缩短页面等待时间。附图说明图1为本专利技术一优选实施例的系统流程图。具体实施方式以下是本专利技术的具体实施例并结合附图,对本专利技术的技术方案作进一步的描述,但本专利技术并不限于这些实施例。实施例1本专利技术涉及一种非阻塞获取域名IP地址的方法,其中,非阻塞是相对于现有技术中的阻塞而言。具体的,“阻塞”是指某一进程必须经过等待一定时间后才能进行下一进程。而相应的,“非阻塞”是指某一进程可以绕过该等待时间直接进行下一进程。用较通俗的语言解释即为:若开车去某一地方,其中某一段道路堵车,“阻塞”的实现方式是等到堵车状况结束才继续开完下一目的地,而缓解“堵塞”达到“非堵塞”的方法则是想办法绕过堵车路段或者减少堵车概率。具体到本专利技术技术方案中,若想获取域名对应的IP地址,可以用多种方式实现,但是,本申请仅针对利用gethostbyname()函数实现的方式。由于gethostbyname()函数是liunx系统的库函数,可以通过程序直接调用,因此实现方式较为简单、应用范围较广。但又由于gethostbyname()函数是阻塞函数,即,若其不能得到服务器响应的话,其必须等待较长的时间才能自动退出。该时间通常为30秒左右,该等待时间对于路由器的页面操作是致命的。但是直接修改gethostname()函数会导致整个系统中其他调用该函数的系统出现错误。为此,本实施例通过如下具体方案解决上述问题。请参照图1,本实施例中,非阻塞获取域名IP地址的方法具体包括如下步骤:主进程获取域名解析请求;“域名解析”即将域名指向网络空间的IP地址。例如,假设域名为www.sina.com.cn,其对应的IP地址为17.25.36.1。域名解析请求是指用户在浏览器中输入域名后,域名服务器找到该域名对应的IP地址的过程。只有获取IP地址后,才能与目标网络进行通信。“进程”是指具有一定独立功能的程序关于某个数据集合的一次运行活动,它是操作系统的基本单元。主进程创建子进程;“子进程”是相对于“主进程”而言。“子进程”是指可独立执行某一功能,但是,受到“主进程”控制,可被“主进程”终止的一类进程。“子进程”被“主进程”终止后,“子进程”所拥有的全部资源,或者归还给“主进程”或者归还给系统。主进程创建子进程可采用其运行的系统设定的多种方法。例如,在Linux系统,即,可采用fork()函数,vfork()函数和clone()函数三种创建方法,每种创建方法产生的子进程在地址、资源、执行功能、与主进程之间的关系上均不大相同。其中,fork()函数拷贝主进程的数据段和代码段、vfork()函数与主进程共享数据段、clone()函数可由使用者选择继承主进程的资源。本实施例中,主进程通过fork()函数创建子进程。通过fork()函数创建的子进程是与主进程几乎完全相同的进程,也即,主进程与子进程可以做完全相同的事,但是,子进程受到主进程控制。由于主进程的本文档来自技高网
...
一种非阻塞获取域名IP地址的方法与系统

【技术保护点】
一种非阻塞获取域名IP地址的方法,其特征在于:包括如下步骤:通过主进程获取域名解析请求;主进程创建子进程;子进程调用gethostbyname()函数以获取域名对应IP地址;主进程监控子进程是否获取到IP地址,若获取到,则继续运行;若未获取到,则主进程等待预设时间后停止等待。

【技术特征摘要】
1.一种非阻塞获取域名IP地址的方法,其特征在于:包括如下步骤:通过主进程获取域名解析请求;主进程创建子进程;子进程调用gethostbyname()函数以获取域名对应IP地址;主进程监控子进程是否获取到IP地址,若获取到,则继续运行;若未获取到,则主进程等待预设时间后停止等待。2.根据权利要求1所述的非阻塞获取域名IP地址的方法,其特征在于:所述的主进程通过调用fork()函数创建子进程。3.根据权利要求1或2所述的非阻塞获取域名IP地址的方法,其特征在于:所述的子进程获取到IP地址后将IP地址写入预设文件中,主进程检测该预设文件是否有内容进而判断子进程是否获取到IP地址。4.根据权利要求1或2所述的非阻塞获取域名IP地址的方法,其特征在于:所述的子进程获取到IP地址后创建IP地址文件,主进程监测是否存在IP地址文件进而判断子进程是否获取到IP地址。5.根据权利要求1或2所述的非阻塞获取域名IP地址的方法,其特征在于:所述的主进程停止等待后,子...

【专利技术属性】
技术研发人员:方迪
申请(专利权)人:上海斐讯数据通信技术有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1