上一篇实现了基于tornado的高性能无阻塞udp服务器,然而光有服务器还是不够的,那么这篇就来实现一个基于tornado的异步udp客户端。
先来分析下客户端的任务:因为整个系统是用来进行代替传统web api的,所以这里的udp客户端不是只发一个包就万事大吉了,而是发出一个包后等待server端返回结果。看似很简单的任务放到tornado上就没那么简单了。传统多进程模型每个访客对应一个进程,在这种模型下我们可以发出udp包之后阻塞该进程等待结果返回。然而对于tornado这种单进程模型,阻塞无异于自杀,所以需要异步写法从而使得发出去一个包之后,tornado进程迅速去处理其他请求等到结果返回时再通过回调函数继续处理该请求。
分析完之后就开始动手啦。先简单封装一个UDPRequest,便于后面处理。只有一点要注意的,数据以'\n\r\n\r'结尾。
class UDPRequest(object):
def __init__(self,addr,port,data):
self.addr = addr
self.port = port
self.data =