Python异步SOAP调用方案
本作品内容为Python异步SOAP调用方案,格式为 doc ,大小 25600 KB ,页数为 3页
('Python异步SOAP调用方案【摘要】:SOAP协议是一种面向连接的协议,所以当SOAP调用开始时,服务请求者需要一直等待SOAP服务器的响应而这期间不能处于挂起状态。在某些情况下,远程方法需要与访问远程资源,或者处理一些依赖关系,这使得远程服务的返回时间不可确定。这样,客户端因为处于监听服务返回的状态而不响应用户的输入,而服务器端也可能因为资源的依赖而处于挂起状态。在这种情况下,使用SOAP异步调用技术可以大大改善客户端和服务器端的阻塞状态,从而提高系统性能。这里我们提出一种基于线程池和观察者模式的方案来实现某些耗时的远程方法。这种技术解决了PythonWeb服务系统模块中没有提供异步SOAP调用的缺陷,并且它也是一种与语言无关的实现,从而可以应用到其它语言中去。【关键词】:SOAP;异步调用;Python1.问题描述一般来说,SOAP服务器接收到一个请求,处理这个请求,然后发送回复。这个过程通常希望是很快完成的;或者说,在用户可以接受的时间内完成。然而,服务器可能并不能总是很快地提供回复。一个操作可能涉及到复杂的数据库查询、文件系统或者依赖于另一个耗时的操作。这个操作将占据HTTP控制器而使得其不能接受其它的SOAP请求,这将降低系统的整体性能。这里是一个例子:假设有3个请求A、B和C处于HTTP请求队列(图1),A需要1秒钟完成,B需要10秒钟完成而C则需要2秒钟完成。既然这3个请求都处于同一个HTTP队列,在同步模式下,可以知道请求A将在1秒后回复,请求B将在11秒后回复,而请求C将在13秒后回复。在这种情况下请求C的回复会显得不合理,因为它是一个可以快速完成的任务,所以它期望能够快速地得到回复。问题在于请求B阻止了HTTP控制器处理C的请求。更槽糕的是,如果请求B需要100秒或者更多的时间才能完成,请求C则只能继续等待。另外,从请求B的客户端来看,它也一直在等待请求B的回复而不能做任何事情,请求B的客户端也使得它的用户处于等待状态。2.我们的方案为了获得服务器端和客户端最大程度的灵活度,设计为基于线程池的异步处理机制,如图2:3.客户端线程池RequestListener的实例在这里维护,它负责将远程调用请求发送给远程服务器。而有时它们也会向远程服务器询问远程方法执行的情况和状态。一旦服务器响应了数据,它将通知请求处理器RequestHandler去执行后续的指令。4.客户端观察者这里通过引入观察者模式来使得客户端能够灵活地处理服务器响应。如果该响应是关于远程方法的执行情况信息,处理器也会将该信息显示给用户。并且这里可以定义多个观察者,从而大大地提高了事件处理的灵活性。5.服务器端线程池对于一个需要很长时间才能完成的远程方法,最好的办法就是启用一个线程来执行它。新的线程从HTTP处理器的主线程分离开来,使得该处理器可以接受一个远程方法请求。从而大幅提高HTTP处理器对于处理类似耗时远程方法的处理性能。6.状态跟踪HTTP是一种无状态的协议,它不能跟踪任何HTTP请求直到服务器有响应。所以,这里需要产生一个全局唯一的标识并且标记到线程池中的每个线程上去。客户端线程也需要保持这个全局唯一的标识,当客户端需要知道远程方法的执行状态时,它需要向SOAP服务器出示该标识,这样服务器才能知道客户端想知道的是哪个线程的执行状态。ThreadSession的实例负责维护服务器端线程池的相关数据,这其中包括线程标识,待执行的远程方法名称和参数,远程方法的输出结果。当带有全局标识的请求被HTTP处理器执行时,处理器将搜索ThreadSession实例。如果输出数据已经生成,处理器将数据整理后发送给客户端,然后ThreadSession实例负责清除执行线程的相关数据。7.其它方面对于从HTTP处理器分离出来的线程,程序不能控制它的执行,那是操作系统的事情。然后,可以在该线程开始的时候赋予它一个较高级别的执行标识,这样线程就可以相对比较快地完成。从主线程分离出一个个的子线程是相对容易的。但是,让子线程增长得太快也不是好事情,某些系统对子线程的个数也有限制。另外,如果线程在执行的过程中卡死了,线程池就要负责监视和清除这些不能执行下去的线程。某些可配置的策略可以使得这个异步调用方案更能体现出价值。显然,将所有的远程方法都使用线程池模式执行是不明智的。只有真正耗时或者用时不确定的远程方法值得启动独立的线程来执行。从客户端的角度来说,花个几秒钟来监听服务器响应来使得用户的操作更有针对性,也不失为一个好办法。8.方案可行性及结论我们已经在Python下实现了该方案的模型。PythonWeb服务被发布到HPUNX机器上,并且我们使用了Python客户端和.Net客户端来验证SOAP服务。某些耗时的远程方法被设置到线程池并将以异步模式执行。测试结果表明该方案对系统总体性能有显著提升。测试用例使用了3个相对较快的方法(小于0.5秒)和1个较慢的方法(1.5秒)。在性能测试工具LoadRunner帮助下,我们可以模拟每3秒钟增加2个用户直到12个用户工作在该系统下。测试结果表明异步模式下每秒可以处理的HTTP请求数大大超过了同步模式,从而说明异步方案具有更好的系统性能。该方案的价值在于实现了PythonWeb服务的异步调用模式,这是在传统PythonWeb服务中所没有提供的功能。并且,观察者模式和双线程池的设计可以使得该方案在实际应用中拥有最大限度的灵活性。参考文献[1]阎宏.《Java与模式》,页671-688.[2]SourceForgeProject,http://pywebsvcs.sourceforge.net/[3]W3C,http://www.w3.org/TR/wsdl注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。',)
提供Python异步SOAP调用方案会员下载,编号:1700878090,格式为 docx,文件大小为3页,请使用软件:wps,office word 进行编辑,PPT模板中文字,图片,动画效果均可修改,PPT模板下载后图片无水印,更多精品PPT素材下载尽在某某PPT网。所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系963098962@qq.com进行删除处理。