感觉上gevent相关的东西也都了解的差不多了。。。最后收一下尾,看看怎么来利用gevent来实际的开发吧。。。
先来说http服务器相关的。。。因为gevent中带有WSGI的server实现。。。所以,可以很方便的利用gevent来开发http服务器。。。例如如下代码,采用gevent加tornado的方式。。。。(tornado其实自带的有I/O循环,但是用gevent可以提高其性能。。)代码如下:
from gevent import monkey; monkey.patch_all()
from gevent.wsgi import WSGIServer
import gevent
import tornado
import tornado.web
import tornado.wsgi
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write('hello world')
def app(env, start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
return ["<b>hello world</b>"]
if __name__ == "__main__":
application = tornado.wsgi.WSGIApplication(handlers=[(r"/", IndexHandler)])
server = gevent.wsgi.WSGIServer(('', 8000), app)
server.serve_forever()
至于说如何来开发基于TCP的server,因为gevent自带了streamserver,其实gevent的WSGI的server也是基于streamserver来开发的。。。非常的简单,只需要提供一个handle就好了。。。每当listener收到了一个socket,它都将会创建一个协程,然后调用handle来处理。。所以只需要同步的方式来写代码就好了。。。代码如下:
from gevent.server import StreamServer
def handle(sock, address):
sock.recv(1000)
sock.send("HTTP/1.1 200 OK\r\n\r\nfafdsa")
server = StreamServer(('', 8000), handle);
server.serve_forever();
实现起来确实很简单,感觉跟代码比nodejs都还要精炼一些。。