httpserver
httpserver
上一节我们说在tornado.web.Application.listen()(示例代码中的app.listen(8000))的方法中,创建了一个http服务器示例并绑定到给定端口,我们能不能自己动手来实现这一部分功能呢?
现在我们修改上一示例代码如下:
# coding:utf-8import tornado.web
import tornado.ioloop
import tornado.httpserver # 新引入httpserver模块class IndexHandler(tornado.web.RequestHandler):"""主路由处理类"""def get(self):"""对应http的get请求方式"""self.write("Hello Itcast!")if __name__ == "__main__":app = tornado.web.Application([(r"/", IndexHandler),])# ------------------------------# 我们修改这个部分# app.listen(8000)http_server = tornado.httpserver.HTTPServer(app) http_server.listen(8000)# ------------------------------tornado.ioloop.IOLoop.current().start()
在这一修改版本中,我们引入了tornado.httpserver模块,顾名思义,它就是tornado的HTTP服务器实现。
我们创建了一个HTTP服务器实例http_server,因为服务器要服务于我们刚刚建立的web应用,将接收到的客户端请求通过web应用中的路由映射表引导到对应的handler中,所以在构建http_server对象的时候需要传出web应用对象app。http_server.listen(8000)将服务器绑定到8000端口。
实际上一版代码中app.listen(8000)正是对这一过程的简写。
单进程与多进程
我们刚刚实现的都是单进程,可以通过命令来查看:
$ ps -ef | grep hello.py
我们也可以一次启动多个进程,修改上面的代码如下:
# coding:utf-8import tornado.web
import tornado.ioloop
import tornado.httpserver class IndexHandler(tornado.web.RequestHandler):"""主路由处理类"""def get(self):"""对应http的get请求方式"""self.write("Hello Itcast!")if __name__ == "__main__":app = tornado.web.Application([(r"/", IndexHandler),])http_server = tornado.httpserver.HTTPServer(app) # -----------修改----------------http_server.bind(8000)http_server.start(0)# ------------------------------tornado.ioloop.IOLoop.current().start()
http_server.bind(port)方法是将服务器绑定到指定端口。
http_server.start(num_processes=1)方法指定开启几个进程,参数num_processes默认值为1,即默认仅开启一个进程;如果num_processes为None或者<=0,则自动根据机器硬件的cpu核芯数创建同等数目的子进程;如果num_processes>0,则创建num_processes个子进程。
本例中,我们使用http_server.start(0),而我的虚拟机设定cpu核数为2,演示结果:
我们在前面写的http_server.listen(8000)实际上就等同于:
http_server.bind(8000)
http_server.start(1)
说明
1.关于app.listen()
app.listen()这个方法只能在单进程模式中使用。
对于app.listen()与手动创建HTTPServer实例
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(8000)
这两种方式,建议大家先使用后者即创建HTTPServer实例的方式,因为其对于理解tornado web应用工作流程的完整性有帮助,便于大家记忆tornado开发的模块组成和程序结构;在熟练使用后,可以改为简写。
2.关于多进程
虽然tornado给我们提供了一次开启多个进程的方法,但是由于:
- 每个子进程都会从父进程中复制一份IOLoop实例,如过在创建子进程前我们的代码动了IOLoop实例,那么会影响到每一个子进程,势必会干扰到子进程IOLoop的工作;
- 所有进程是由一个命令一次开启的,也就无法做到在不停服务的情况下更新代码;
- 所有进程共享同一个端口,想要分别单独监控每一个进程就很困难。
不建议使用这种多进程的方式,而是手动开启多个进程,并且绑定不同的端口。
httpserver相关推荐
- 开源组件websocket-sharp中基于webapi的httpserver使用体验
一.背景 因为需要做金蝶ERP的二次开发,金蝶ERP的开放性真是不错,但是二次开发金蝶一般使用引用BOS.dll的方式,这个dll对newtonsoft.json.dll这个库是强引用,必须要用4.0 ...
- 两款轻量级服务器 Http-server SimpleHTTPServer
Http-server # 全局安装 npm install http-server -g# 启动服务# 禁用缓存 http-server -c-1# 在当前目录下的www启动服务器 http-ser ...
- 【IOS】ios之httpServer
2019独角兽企业重金招聘Python工程师标准>>> 在使用百度音乐的时候 感觉到他的wifi传歌很实用 再手机上创建一个httpserver 然后通过pc的浏览器 进 ...
- 在Android上实现HttpServer
本文讲的是在Android上实现HttpServer,在最近的项目中因为要用Android作为一个服务器去做一个实时接收数据的功能,所以这个时候就要去做一个Android本地的微型服务器. 那么此时我 ...
- http-server swagger-editor启动成功后,访问404的解决方法
http-server swagger-editor启动成功后,访问404的解决方法 参考文章: (1)http-server swagger-editor启动成功后,访问404的解决方法 (2)ht ...
- java vertx http_佛系学习Vert.x之创建你的HttpServer
大噶好,最近关注了一个叫Vert.x的东西 这是一个Logo 简单的说这是一个事件驱动的NIO框架,底层基于Netty.(这里我要上个测评)在 Web框架性能测试Round16中的各项指标表现还是很不 ...
- JAVA实现HTTPserver端
用java socket实现了一个简单的httpserver, 能够处理GET, POST,以及带一个附件的multipart类型的POST.尽管中途遇到了非常多问题, 只是通过在论坛和几个高手交流了 ...
- windows7环境下的http-server的问题 排查
刚才写了 windows7环境下的http-server的安装 记录.现在写一下问题,这个新鲜的. 前几天打开http-server时,出现了如下画面 尝试了好几次,也从vivaldi换成了chrom ...
- 【Node.js】http-server 实现目录浏览服务
前言 node.js v12.18.2 用 node.js 实现目录浏览服务 前提,已经按照好Node.js http-server 官网:https://www.npmjs.com/package/ ...
- python实例32[简单的HttpServer]
通常地我们要在不同平台间共享文件,samba,ftp,cifs,ntfs的设置都是有点复杂的, 我们可以使用python提供的httpserver来提供基于http方式跨平台的文件共享. 一 命令行启 ...
最新文章
- Spring抛出异常_自动装配
- php拍照从手机相册中选择,Android获取图片:拍照和从相册中选择
- Linux内存管理之mmap详解
- 使用 Async 和 Await 的异步编程
- 让S3c2410里拥有HIVE注册表的 全部步骤
- [转载] 快速入门(完整):Python实例100个(基于最新Python3.7版本)
- openCms安装技巧
- 计算机语言变成乱码怎么办,电脑文本文档出现乱码,教你电脑文本文档出现乱码怎么办...
- 从3D ToF到智能座舱系统方案,英飞凌如何赋能未来出行?
- ftp 连接失败。500 OOPS: cannot change directory:
- win10关闭自带杀毒软件Windows Defender的两种方法
- 指纹特征提取及描述(附Python代码)
- 在滴滴数据分析岗实习的8个月
- 八、chmod命令详细用法
- arduino实验日记
- linux服务器光衰,linux下怎么查看光模块光功率
- 【项目分享】使用 PointNet 进行点云分割
- Android 抖音爱心动画,Android自定义View实现抖音飘动红心效果
- 乐视网造假上市,法律后果有哪些?
- unity解压缩文件踩坑记录