介绍
使用了一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器。其应用程序使用的 Web 框架看起来有些像 或者 Google 的 , 不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关的有用工具 和优化。
就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对 的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 )
初次接触Tornado框架看简介也是云里雾里,先来简化一下现在的需求:
- 本应用分为客户端和服务器端
- 客户端点击按钮进行消息发送
- 服务器端接收到客户端消息后进行回复
- 客户端收到服务器端回复后进行弹框显示
需求简单,下面按照需求来一步一步实现:
客户端代码用MUI框架来实现
socket测试
服务器端代码为python3+tornado
编码之前,先进性tornado模块的安装(pip install tornado)。
官方实例中只给了class中的内容,没有给出具体是如何调用的,再此列出详细调用过程。
#!/usr/bin/env python#coding=utf-8from tornado import websocketimport tornado.httpserverimport tornado.webimport tornado.ioloop#官方Democlass 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'弹窗,测试成功。