gevent开发http服务器与tcp服务器(WSGIServer、StreamServer)
生活随笔
收集整理的這篇文章主要介紹了
gevent开发http服务器与tcp服务器(WSGIServer、StreamServer)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
感覺上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.wsgiclass 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 StreamServerdef handle(sock, address):sock.recv(1000)sock.send("HTTP/1.1 200 OK\r\n\r\nfafdsa")server = StreamServer(('', 8000), handle); server.serve_forever(); # On Unix: Access with ``$ nc 127.0.0.1 5000`` # On Window: Access with ``$ telnet 127.0.0.1 5000``from gevent.server import StreamServerdef handle(socket, address):socket.send("Hello from a telnet!\n")for i in range(5):socket.send(str(i) + '\n')socket.close()server = StreamServer(('127.0.0.1', 5000), handle) server.serve_forever()?
實現起來確實很簡單,感覺跟代碼比nodejs都還要精煉一些。。
總結
以上是生活随笔為你收集整理的gevent开发http服务器与tcp服务器(WSGIServer、StreamServer)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sigprocmask()函数实例详解,
- 下一篇: C/C++ 去掉字符串首位的空格字符