Python tornado初探
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python tornado初探相关的知识,希望对你有一定的参考价值。
介绍
FriendFeed使用了一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器。其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 webapp, 不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。
Tornado 就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 The C10K problem )
初次接触Tornado框架看简介也是云里雾里,先来简化一下现在的需求:
- 本应用分为客户端和服务器端
- 客户端点击按钮进行消息发送
- 服务器端接收到客户端消息后进行回复
- 客户端收到服务器端回复后进行弹框显示
需求简单,下面按照需求来一步一步实现:
客户端代码用MUI框架来实现
<!doctype html> <html> <head> <meta charset="UTF-8"> <title>socket测试</title> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <!--加载CSS样式文件--> <link href="css/mui.min.css" rel="stylesheet" /> <!--用HTML5规范中的Websocket进行与服务器端的socket连接与通信 --> <script type="text/javascript"> function socketTest(){ //此处的连接地址格式为(ws://服务器ip:规定端口号/服务器指定参数) var wsServer = ‘ws://192.168.0.32:9999/sok‘; var ws = new WebSocket(wsServer); ws.onopen = function(){ console.log("open"); //此处注意,只有写了onopen方法之后send方法才会起效 ws.send("Hello"); } //信息返回函数,服务器返回的信息在此处接收 ws.onmessage = function(msg){ alert(msg.data); }; } </script> </head> <body> <button type="button" class="mui-btn mui-btn-outlined" onclick="socketTest()">socket测试</button> <script src="js/mui.min.js"></script> <script type="text/javascript"> mui.init() </script> </body> </html>
服务器端代码为python3+tornado
编码之前,先进性tornado模块的安装(pip install tornado)。
官方实例中只给了class中的内容,没有给出具体是如何调用的,再此列出详细调用过程。
#!/usr/bin/env python #coding=utf-8 from tornado import websocket import tornado.httpserver import tornado.web import tornado.ioloop #官方Demo class EchoWebSocket(websocket.WebSocketHandler): #检查源,如果不加check_origin会报403错误 def check_origin(self, origin): return True def open(self): print("websocket opened") #参数中的message是客户端传进来的,此函数运行后将返回信息给客户端 def on_message(self, message): self.write_message(u"You said" +message) def on_close(self): print("websocket closed") #url参数对应类,相当于MVC架构中的Congrol # 本例中客户端中的 ws://192.168.0.32:9999/sok 调用的就是EchoWebSocket类 #如果有多个类,则写多个对应即可 application = tornado.web.Application([ (r"/sok",EchoWebSocket) ]) #主函数规定端口号,并开启服务器进行监听 if __name__ =="__main__": application.listen(9999) tornado.ioloop.IOLoop.instance().start()
运行调试
运行python代码开启服务器监听,回到客户端,点击 socket测试按钮,显示‘You said Hello‘弹窗,测试成功。
以上是关于Python tornado初探的主要内容,如果未能解决你的问题,请参考以下文章
有没有一种好方法可以将 pychecker/pylint 应用于 Tornado 模板中的 python 代码?
Sockjs - 在 Python 代码中向 sockjs-tornado 发送消息