Webfaction中的Tornado网页服务器

2 投票
2 回答
1045 浏览
提问于 2025-04-17 16:59

我刚开始学习网页开发,想用Instagram的API和Django来开发一个网页应用。我发现很多人都在用Tornado Web Server来处理实时订阅。所以我在Webfaction上托管我的项目,找到了这段代码,可以把我的Django项目放到Tornado提供的“WSGI容器”里:

import os
import tornado.httpserver
import tornado.ioloop
import tornado.wsgi
import tornado.web
import sys
import django.core.handlers.wsgi
sys.path.append('/path/to/project')

class HelloHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('Hello from tornado')

def main():
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' # path to your settings module
    wsgi_app = tornado.wsgi.WSGIContainer(django.core.handlers.wsgi.WSGIHandler())
    tornado_app = tornado.web.Application(
            [
                    ('/hello-tornado', HelloHandler),
                    ('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
            ]
    )
    http_server = tornado.httpserver.HTTPServer(tornado_app)
    http_server.listen(8080)
    tornado.ioloop.IOLoop.instance().start()

if __name__ == "__main__":
    main()

我在Webfaction服务器上运行了这个Python脚本,但每次我试着访问“http://mywebsite.com/hello-tornado/”时,总是无法正常工作。我知道我在那个端口上运行了Tornado服务器,但不太清楚怎么从浏览器访问它,或者该怎么做。我哪里出错了呢?谢谢你的帮助和耐心。每个回答我都会给个网络击掌。

补充一下:我真正想做的是通过Tornado接收我用Instagram实时订阅API发出的所有订阅请求。为此,我有一个回调网址“http://mysite.com/sub”,我希望能通过Tornado接收到这些请求。

2 个回答

0

你需要创建一个自定义的应用程序(监听一个端口),记下分配给你应用的端口,然后配置tornado让它在那个端口上运行:http_server.listen(我的端口)。

你也可以不使用tornado,直接安装一个django应用来启动。

2

你正在使用8080端口启动服务器,而网页浏览器默认使用80端口。所以你可以试试这个链接:http://mywebsite.com:8080/hello-tornado

如果你想使用80端口,但你的机器上已经有一个网页服务器在运行,你可以试试Ali-Akber Saifee的建议,或者直接从服务器运行WSGI应用程序,使用像mod_python这样的工具(http://www.modpython.org)。不过这样的话,你就不能运行Tornado的代码了,但Django是可以正常工作的。

撰写回答