asyncore就是纯粹的异步socket,和c++使用异步socket没有什么大的区别,就是封装了loop等。实际上还是会有很多状态。
eventlet采用coroutine,本质上也是异步socket,但是已经是将异步socket同步化,没有任何状态(状态都保存在栈中),只有异步才需要考虑状态,同步根本没有状态之分。
所以eventlet明显比asycore要好用很多,也复杂很多。
贴一个asycore的例子:
#!/usr/bin/python
import sys,os,time;
import asyncore,socket;
class HTTPClient(asyncore.dispatcher):
def __init__(self, host, port, path):
asyncore.dispatcher.__init__(self);
self.create_socket(socket.AF_INET, socket.SOCK_STREAM);
self.connect((host, int(port)));
self.buffer = 'GET %s HTTP/1.1\r\nHost: %s\r\n\r\n'%(path, host);
def handle_connect(self):
pass;
def handle_close(self):
self.close();
def handle_read(self):
print("[handle_read] event loop start to read.");
print self.recv(8192