Веб-сервер Python - PullRequest
       5

Веб-сервер Python

0 голосов
/ 17 января 2011

Мне нужен простой веб-сервер Python для следующего случая использования: я хочу написать простой сервер, который будет принимать запросы HTTP от моего приложения, работающего в Google App Engine.Сервер будет принимать HTTP-запросы, а затем отправлять уведомления iphone.(В основном мне нужен этот дополнительный сервер, чтобы учесть отсутствие поддержки сокетов в google app engine).

Я думаю, мне нужен сервер, чтобы поддерживать постоянное соединение со службой push-уведомлений Apple.Поэтому мне нужно, чтобы для этого всегда была открыта какая-то тема.Поэтому мне нужен какой-то веб-сервер, который может принять запрос и передать его другому потоку с постоянным подключением к APNS.

Может быть, несколько процессов и один из инструментов организации очередей питонов для связи между ними?Принять запрос HTTP, а затем поставить сообщение в очередь другому процессу?

Мне было интересно, что посоветует кто-то с небольшим опытом.Я начинаю думать, что, возможно, даже написать свой собственный простой сервер - хороший вариант (http://fragments.turtlemeat.com/pythonwebserver.php).

Ответы [ 2 ]

4 голосов
/ 17 января 2011

Один из вариантов будет (с соответствующим названием) SimpleHTTPServer , который является частью стандартной библиотеки Python. Другим, более гибким, но более сложным вариантом было бы написать ваш сервер в Twisted .

3 голосов
/ 17 января 2011

Я писал простые http-серверы, используя gevent и bottle - пример:

#!/usr/bin/env python

import gevent.monkey
gevent.monkey.patch_all()

import bottle
bottle.debug(True)

import gevent.wsgi

from bottle import route, run, request, response, static_file, abort

@route('/echo')
def echo():
    s = request.GET.get('s', 'o hai')
    return '<html><head><title>echo server</title></head><body>%s</body></html>\r\n' % (s)

@route('/static/:filename')
def send_static(filename):
    root = os.getcwd() + '/static'
    return static_file(filename, root=root)

if __name__ == '__main__':
    app = bottle.app()
    wsgi_server = gevent.wsgi.WSGIServer(('0.0.0.0', 8000), app)
    print 'Starting wsgi search on port 8000'
    wsgi_server.serve_forever()

Чтобы вы могли написать простой сервер, который вставляет задание в очередь (см. Gevent.queue) иесть другой рабочий гринлет, который обрабатывает запросы на чтение из очереди и их обработку ...

...