mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
return response now
This commit is contained in:
parent
90e87c6f0d
commit
93097b74e6
@ -41,6 +41,9 @@ class HTTPRequest(object):
|
||||
self.method = None
|
||||
self.path = None
|
||||
self.headers = {}
|
||||
self.response_status = None
|
||||
self.response_headers = {}
|
||||
self._version = 11
|
||||
self.fp = socket.makefile("rw", self.CHUNK_SIZE)
|
||||
|
||||
|
||||
@ -93,8 +96,6 @@ class HTTPRequest(object):
|
||||
key = 'HTTP_' + key.replace('-', '_')
|
||||
if key not in ('HTTP_CONTENT_TYPE', 'HTTP_CONTENT_LENGTH'):
|
||||
environ[key] = value
|
||||
|
||||
print environ
|
||||
return environ
|
||||
|
||||
def read_headers(self):
|
||||
@ -152,6 +153,16 @@ class HTTPRequest(object):
|
||||
data.seek(0)
|
||||
return data, str(length) or ""
|
||||
|
||||
def start_response(self, status, response_headers):
|
||||
resp_head = []
|
||||
self.response_status = status
|
||||
self.response_headers = {}
|
||||
resp_head.append("%s %s" % (self.version, status))
|
||||
for name, value in response_headers:
|
||||
resp_head.append("%s: %s" % (name, value))
|
||||
self.response_headers[name.lower()] = value
|
||||
self.fp.write("%s\r\n\r\n" % "\r\n".join(resp_head))
|
||||
|
||||
def write(self, data):
|
||||
self.fp.write(data)
|
||||
|
||||
@ -161,7 +172,7 @@ class HTTPRequest(object):
|
||||
|
||||
def first_line(self, line):
|
||||
method, path, version = line.split(" ")
|
||||
self.version = version
|
||||
self.version = version.strip()
|
||||
self.method = method.upper()
|
||||
self.path = path
|
||||
|
||||
@ -202,7 +213,6 @@ class FileInput(object):
|
||||
self.close()
|
||||
return s
|
||||
|
||||
|
||||
def readline(self, size=None):
|
||||
if self.fp is None or self.eof:
|
||||
return ''
|
||||
|
||||
@ -25,6 +25,7 @@ import sys
|
||||
import time
|
||||
|
||||
from gunicorn.httprequest import HTTPRequest
|
||||
from gunicorn.httpresponse import HTTPResponse
|
||||
from gunicorn import socketserver
|
||||
from gunicorn.util import NullHandler
|
||||
|
||||
@ -149,8 +150,12 @@ class HTTPServer(object):
|
||||
def process_client(self, listener, conn, addr):
|
||||
""" do nothing just echo message"""
|
||||
req = HTTPRequest(conn, addr, listener.getsockname())
|
||||
environ = req.read()
|
||||
req.write(str(environ))
|
||||
try:
|
||||
result = self.app(req.read(), req.start_response)
|
||||
response = HTTPResponse(req, result)
|
||||
response.send()
|
||||
except Exception, e:
|
||||
print >>sys.stderr, str(e)
|
||||
req.close()
|
||||
|
||||
def worker_loop(self, worker_pid, worker):
|
||||
|
||||
@ -1,54 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# Copyright 2008,2009 Benoit Chesneau <benoitc@e-engura.org>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at#
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
import socket
|
||||
|
||||
class Socket(socket.socket):
|
||||
def accept_nonblock(self):
|
||||
self.setblocking(0)
|
||||
return self.accept()
|
||||
|
||||
|
||||
class TCPServer(Socket):
|
||||
"""class for server-side TCP sockets.
|
||||
This is wrapper around socket.socket class"""
|
||||
|
||||
def __init__(self, address, **opts):
|
||||
self.address = address
|
||||
self.backlog = opts.get('backlog', 1024)
|
||||
self.timeout = opts.get('timeout', 300)
|
||||
self.reuseaddr = opts.get('reuseaddr', True)
|
||||
self.nodelay = opts.get('nodelay', True)
|
||||
self.recbuf = opts.get('recbuf', 8192)
|
||||
|
||||
socket.socket.__init__(self, socket.AF_INET, socket.SOCK_STREAM)
|
||||
|
||||
if self.reuseaddr:
|
||||
self.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
||||
|
||||
if self.nodelay:
|
||||
self.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
||||
|
||||
if self.recbuf:
|
||||
self.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF,
|
||||
self.recbuf)
|
||||
|
||||
self.settimeout(self.timeout)
|
||||
self.bind(address)
|
||||
self.listen()
|
||||
|
||||
def listen(self):
|
||||
super(TCPServer, self).listen(self.backlog)
|
||||
10
test.py
10
test.py
@ -1,5 +1,13 @@
|
||||
from gunicorn.httpserver import HTTPServer
|
||||
|
||||
|
||||
def simple_app(environ, start_response):
|
||||
"""Simplest possible application object"""
|
||||
status = '200 OK'
|
||||
response_headers = [('Content-type','text/plain')]
|
||||
start_response(status, response_headers)
|
||||
return ['Hello world!\n']
|
||||
|
||||
if __name__ == '__main__':
|
||||
server = HTTPServer(None, 4)
|
||||
server = HTTPServer(simple_app, 4)
|
||||
server.join()
|
||||
Loading…
x
Reference in New Issue
Block a user