Tornado写简易服务器

我们都知道在Web开发中,都需要服务器,比如Java Web开发的Tomcat,WebLogic,WebSphere,现在来看利

用Tornado Web Server框架如何写一个简易的Python服务器。

一般来说只需要实现get和post方法就可以了。以上次使用redis数据库的例子说明,数据库插入代码如下:

import redis
import datetime

class Database:
    def __init__(self):
        self.host = ‘localhost‘
        self.port = 6379
        self.write_pool = {}

    def add_write(self,website,city,year,month,day,deal_number):
        key = ‘_‘.join([website,city,str(year),str(month),str(day)])
        val = deal_number
        self.write_pool[key] = val

    def batch_write(self):
        try:
            r = redis.StrictRedis(host=self.host,port=self.port)
            r.mset(self.write_pool)
        except Exception, exception:
            print exception

def add_data():
    beg = datetime.datetime.now()
    db = Database()
    for i in range(1,10000):
        db.add_write(‘meituan‘,‘beijing‘,2013,i,1,i)
    db.batch_write()
    end = datetime.datetime.now()
    print end-beg

if __name__ == ‘__main__‘:
    add_data()

以上代码插入了数据,那么现在用我们的服务器来访问一些数据。

import json
import redis
import tornado.web
import tornado.httpserver
from tornado.options import define, options

define("port", default=8888, type=int)

class DealHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.port = 6379
        self.host = "localhost"

    def get(self):
        website = self.get_argument("website",None)
        city    = self.get_argument("city",None)
        year    = self.get_argument("year",None)
        month   = self.get_argument("month",None)

        keyset = []
        for i in range(1,31):
            key = ‘_‘.join([website,city,year,month,str(i)])
            keyset.append(key)

        r = redis.StrictRedis(host=self.host,port=self.port)
        self.write( json.dumps(r.mget(keyset)) )

class ExampleHandler(tornado.web.RequestHandler):
    def get(self):
        who = self.get_argument("who", None)
        if who:
            self.write("Hello, " + who)
        else:
            self.write("Hello World!")

    def post(self):
        who = self.get_argument("who", None)
        if who:
            self.write("Hello, " + who)
        else:
            self.write("Hello World!")

class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/", ExampleHandler),
            (r"/deal", DealHandler),
        ]
        settings = dict()
        tornado.web.Application.__init__(self, handlers, settings)

def create_server():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    create_server()

以上代码实现了一个简单的服务器,用于处理http请求。

在浏览器中输入:

http://localhost:8888/deal?website=meituan&city=beijing&year=2013&month=9

即可得到需要的数据。。。

Tornado写简易服务器,码迷,mamicode.com

时间: 2024-11-12 09:46:19

Tornado写简易服务器的相关文章

python搭建简易服务器实例参考

有关python搭建简易服务器的方法. 需求分析: 省油宝用户数 已经破了6000,原有的静态报表 已经变得臃肿不堪, 每次打开都要缓上半天,甚至浏览器直接挂掉 采用python搭建一个最最简易的 web 服务 请求一个nick 就返回 对应的 报表数据 参数用GET方式传送 调研与实现: 园里没找到靠谱的,google了半天,最终还是成功了. 以下是源码,里面记录了 其中的 一些问题 复制代码 代码如下: #! /usr/bin/env python # -*- coding: utf-8 -

mini2440之动手写简易bootloader

Bootloader 它的终极使命就是启动内核,它的主要工作:在上电之后在硬件上进行一系列的初始化,为Linux内核启动铺路.具体的就是设置看门狗.设置系统时钟.初始化SDRAM与NANDflash控制器.代码重定位等,最后将内核从nandflash上拷贝到内存中,传递参数,跳转执行. 一.创建start.S文件 .text .global _start _start: /* close the watchdog */ ldr r0, =0x53000000 mov r1, #0 str r1,

从头写rtsp服务器-RTSP协议的解析

rtps demo(linux是64位的,windows32位的):rtsp_demo.rar 1.首先服务器收到客户端连接请求,生产 一个RtspClientConnection对象,RtspClientConnection定义详见  从头写rtsp服务器-模块的划分 int rtsp::v_accept(netconnection * n) { netoperation::v_accept(n); printf("client accept\n\n\n"); RtspClientC

Python网络编程02----基于UDP的Python简易服务器

UDP 服务器不是面向连接的,所以不用像 TCP 服务器那样做那么多设置工作.事实上,并不用设置什么东西,直接等待进来的连接就好了. ss = socket() # 创建一个服务器套接字 ss.bind() # 绑定服务器套接字 inf_loop: # 服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 服务器端: from socket import * from time import ctime

JDK动态代理深入理解分析并手写简易JDK动态代理(上)

原文引用https://www.dazhuanlan.com/2019/08/26/5d6300df6f20f/ 博客真的是好几个月没更了,2019新年第一篇,继续深入动态代理,前两篇简单分析了动态代理的实现原理之后,这次继续深入了解具体的实现方式,并手写一套简易的动态代理已加强理解: 本博客关于Java动态代理相关内容直达链接: JDK动态代理浅析 Cglib动态代理浅析 JDK动态代理深入理解分析并手写简易JDK动态代理(上) JDK动态代理深入理解分析并手写简易JDK动态代理(下) 博客真

腾讯高级工程师:如何从头开始写游戏服务器框架_转

转自: 腾讯高级工程师:如何从头开始写游戏服务器框架 本文作者:韩伟,腾讯互娱高级工程师,目前在 Next 产品中心研发创新类型游戏. 前言:从去年开始作者投入了一些具体游戏项目的开发,这些新的游戏项目,比较接近独立游戏的开发方式.在这个过程中,作者从头写了一个游戏服务器端的框架,以便获得更好的开发效率和灵活性.因此这篇文章便是该项目服务器框架的设计和实现过程的总结. PS:框架的基本运行环境是 Linux ,采用 C++ 编写.为了能在各种环境上运行和使用,采用了 gcc4.8 这个“古老”的

用tornado 写异步回调程序

用tornado,一般都用到它的 AsyncHTTPClient的 fetch.我们可以参考 fetch,使用tornado的特性,写异步回调程序 首先看看 fetch的实现,关键是用了future def fetch(self, request, callback=None, **kwargs): """Executes a request, asynchronously returning an `HTTPResponse`. The request may be eit

自己动手写RTP服务器——关于RTP协议

转自:http://blog.csdn.net/baby313/article/details/7353605 本文会带领着你一步步动手实现一个简单的RTP传输服务器,旨在了解RTP流媒体传输协议以及一些关于多媒体编解码的知识. 关于RTP协议的必备知识 要动手实现一个协议,当然首先需要阅读该协议的文档.RTP协议的文档,有rfc1889.rfc1890.rfc3550,其中rfc3550是现在的版本,另外两个是过期版.这个协议可以在ietf的官网找到:http://tools.ietf.org

自己动手写RTP服务器——用RTP协议传输TS流

上一篇文章我们介绍了关于RTP协议的知识,那么我们现在就自己写一个简单的传输TS流媒体的RTP服务器吧. 预备知识 关于TS流的格式:TS流封装的具体格式请参考文档ISO/IEC 13818-1.这里我们只需要了解一些简单的信息就好.首先TS流是有许多的TS Packet组成的,每个TS Packet的长度固定为188 bytes,每个packet都是以sync_byte:0x47开头. MTU(Maximum Transmission Unit): 最大传输单元.是指一种通信协议的某一层上面所