仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 544|回复: 8
打印 上一主题 下一主题

[CentOS(社区)] 来一发基于python的Tornado Web Server来完成Comet

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-14 20:47:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的好朋友们!普通的web运用,都邑应用ajax轮询来取得办事器的更新。但轮询方法会增长办事器的压力,并且许多要求取得的数据并没有更新,这些要求都是有意义的,徒增办事器压力罢了。
应用Comet技术可以必定水平地处理以上成绩。Comet的完成许多,年夜多半须要应用特定的HTTPServer来完成。本文引见应用基于python的TornadoWebServer来完成ServerSide的Comet,为了切近临盆情况,还会引见Tornado若何合营Nginx任务。
装置
到http://www.tornadoweb.org/可以下载到最新的Tornado,那边也有装置的解释。
编写第一个Tornado法式
编纂comet.py,内容以下
  1. #!/usr/bin/envpythonimporttornado.httpserverimporttornado.ioloopimporttornado.webclassMainHandler(tornado.web.RequestHandler):@tornado.web.asynchronous#解释1defget(self):some_async_func(callback=self.wait)defwait(self,result):ifresult:self.write(result)self.finish()#解释2else:tornado.ioloop.IOLoop.instance().add_timeout(time.time()+0.5,lambda:some_async_func(callback=self.wait))#解释3application=tornado.web.Application([(r"/",MainHandler),])if__name__=="__main__":http_server=tornado.httpserver.HTTPServer(application)http_server.listen(8999)tornado.ioloop.IOLoop.instance().start()解释1:应用此decorator便可以把get办法non-blocking化解释2:non-blocking化的要求必需挪用self.finish()完成要求解释3:假如须要sleep期待,应当应用Tornado的IOLoop的add_timeout办法。应用其他休眠办法如time.sleep会block住以后线程,而Tornado是一个单线程Server,会招致其他要求没法履行的成绩。
复制代码

此时履行comet.py,一个non-blocking的server端曾经搭建胜利。
要留意的成绩是,假如不加超机会制,办事端会赓续履行,即便客户端曾经断开。是以还需本身完成超机会制。
Nginx设置装备摆设
  1. upstreamfrontends{server127.0.0.1:8999;}server{listen8888;location/{proxy_read_timeout1800;proxy_pass_headerServer;proxy_set_headerHost$http_host;proxy_redirectoff;proxy_set_headerX-Real-IP$remote_addr;proxy_set_headerX-Scheme$scheme;proxy_passhttp://frontends;}}
复制代码

此设置装备摆设采取proxyupstream到backend的缘由是便利upstream负载平衡,只须要upstream中添加多几个ip端口便可。后面提过,Tornado是单线程Server,启动cpu核数个Tornado过程并绑定到cpu,可以或许进步机械的吞吐量。
须要特殊指出的是,要依据上述运用的超机会制,设置proxy_read_timeout,proxy_read_timeout必需年夜于运用的超时。不然将会有504要求前往。
至此,一个Comet运用的办事器端就完成了。因为Comet应用的是长衔接机制,须要特殊留意从客户端到真正后端法式之间每一个环节的超机会制,并且收集衔接的弗成靠性影响将会更年夜,须要斟酌更多界限前提。
参考材料:


  • http://www.tornadoweb.org/documentation
欢迎大家来到仓酷云论坛!
变相怪杰 该用户已被删除
沙发
发表于 2015-1-16 23:01:46 | 只看该作者

来一发基于python的Tornado Web Server来完成Comet

如果你想深入学习Linux,看不懂因为文档实在是太难了。写的最好的、最全面的文档都是英语写的,最先发布的技术信息也都是用英语写的。
莫相离 该用户已被删除
板凳
发表于 2015-1-25 17:07:32 | 只看该作者
我感觉linux的学习,学习编程~!~!就去学习C语言编程!!
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-3 12:35:29 | 只看该作者
我是学习嵌入式方向的,这学期就选修了这门专业任选课。
只想知道 该用户已被删除
5#
发表于 2015-2-9 03:16:11 | 只看该作者
一定要养成在命令行下工作的习惯,要知道X-window只是运行在命令行模式下的一个应用程序。在命令行下学习虽然一开始进度较慢。
深爱那片海 该用户已被删除
6#
发表于 2015-2-26 20:28:46 | 只看该作者
在学习linux的工程中,linux学习方法有很多种,这里是小编的学习心得,给大家拿出来分享一下。
不帅 该用户已被删除
7#
发表于 2015-3-8 17:56:00 | 只看该作者
得到到草率的回答或者根本得不到任何Linux答案。越表现出在寻求帮助前为解决问题付出的努力,你越能得到实质性的帮助。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-16 14:50:28 | 只看该作者
通过自学老师给的资料和向同学请教,掌握了一些基本的操作,比如挂载优盘,编译程序,在Linux环境下运行,转换目录等等。学了这些基础才能进行下面的模拟OS程序。?
若相依 该用户已被删除
9#
发表于 2015-3-22 23:59:59 | 只看该作者
Windows?是图形界面的,Linux类似以前的?DOS,是文本界面的,如果你运行了图形界面程序X-WINDOWS后,Linux?也能显示图形界面,也有开始菜单、桌面、图标等。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2025-1-11 06:25

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表