我的最终目标是使用python实现一个WebSocket服务器。
我通过在python脚本中导入tornado来实现这一点。我还在apache中安装了mod_wsgi,并且their script输出Hello World!,所以WSGI看起来工作得很好。据我所知,Tornado也工作得很好。
当我使用tornado's wsgi "Hello, world" script时出现此问题:
import tornado.web
import tornado.wsgi
import wsgiref.simple_server
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
if __name__ == "__main__":
application = tornado.wsgi.WSGIApplication([
(r"/", MainHandler),
])
server = wsgiref.simple_server.make_server('', 8888, application)
server.serve_forever()
首先,我得到一个500错误,日志告诉我WSGI找不到“应用程序”。
因此,我删除了if __name__ == "__main__"
,页面将无限加载。
我假设这是因为server.serve_forever()
,所以我删除了它,试图看到Hello,world
但是现在我只得到了404: Not Found
,这不是我的apache 404页面,而且我知道服务器可以找到我的主.wsgi文件...
4条答案
按热度按时间s8vozzvw1#
你不能在Tornado的WSGIApplication中使用websocket。要使用Tornado的websocket支持,你必须使用Tornado的HTTPServer,而不是apache。
vu8f3i0k2#
WSGIApplication处理程序相对于Web服务器根目录。如果您的应用程序URL是/myapp,则您的“application”必须如下所示:
哦,看起来文档很糟糕(和往常一样),
__name__
在apache下运行时看起来像这样:_mod_wsgi_8a447ce1677c71c08069303864e1283e
.因此,正确的“Hello World”python脚本将如下所示:
/var/www/wsgi-scripts/myapp.wsgi
:在apache配置中(不是.htaccess):
WSGIScriptAlias /myapp /var/www/wsgi-scripts/myapp.wsgi
ee7vknir3#
要在apache中使用tornado,请在apache中添加mod-wsgi插件。
使用.wsgi编写tornado wsgi服务器注意:不要使用__name__
配置apache.conf以运行您的服务器。要进行配置,请使用thismod-wsgi指南
uqxowvwt4#
如果您仍然想将它们结合起来,您可以使用Apache作为代理,它将只是用户前面的第一个点-但实际上将流量重新路由到您的本地Tornado服务器(In / Out)
以我的例子为例,我的Apache监听端口443(一些默认配置),然后我在端口8080运行我的tornado,并给出一个路径-将重定向
如果您使用的是RedHat“系列”操作系统,还应启用转发网络连接的功能: