我已经使用mod_wsgi在have上部署了一个Flask应用程序。我的应用程序很简单,但是实现了Flask,这给我带来了麻烦。我的代码在本地主机上运行得很好,但是现在它已经在我的Web派系服务器上运行了,客户端无法连接到我的套接字。我不太清楚我的问题来自哪里-我假设我没有正确地设置我的apache配置文件,但这可能不是真的。
在客户端,我在对websocket的GET和POST调用中都会收到一个400 (不好的请求)错误。断断续续地看到一个警告,通知我在建立连接之前套接字已关闭。我还偶尔收到一个错误,说明在WebSocket握手过程中出现了一个错误。
我的apache httpd.conf文件如下:
ServerRoot "/home/< user >/webapps/< my_app >/apache2"
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule wsgi_module modules/mod_wsgi.so
LoadModule unixd_module modules/mod_unixd.so
Listen 18161
KeepAlive On
SetEnvIf X-Forwarded-SSL on HTTPS=1
ServerLimit 1
StartServers 1
MaxRequestWorkers 5
MinSpareThreads 1
MaxSpareThreads 3
ThreadsPerChild 5
WSGIDaemonProcess < my_app > processes=2 threads=12 python-path=/home/< user >/webapps/< my_app >:/home/< user >/webapps/< my_app >/lib/python2.7
WSGIProcessGroup < my_app >
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIScriptAlias / /home/< user >/webapps/< my_app >/wsgi.py我看过一些关于proxy_module & proxy_http_module的帖子,但我不太确定是否需要它,如果需要的话,应该如何配置它。任何关于这个问题的指导都将不胜感激!
发布于 2016-03-23 22:25:08
关于proxy_module和proxy_http_module的内容是为了将Apache用作后端websockets应用程序的前端代理。它不适用于你想要做的事。
mod_wsgi并不适合服务websocket应用程序。不要使用它,而是使用Flask-SocketIO文档的部署部分中推荐的部署选项之一。
例如,要在WebFaction上使用第一个推荐选项(即嵌入式服务器),首先安装eventlet模块。我假设你现在已经安装了水瓶和酒瓶-SocketIO。
接下来,通过WebFaction控制面板安装一个“自定义websockets监听端口”应用程序。记下应用程序的指定端口,然后将应用程序分配到控制面板中的网站。您不需要打开应用程序的端口。
接下来,将您的Flask应用程序配置为在分配给您的websockets应用程序的端口上运行。最简单的方法是将端口传递给socketio.run,例如:
if __name__ == '__main__':
socketio.run(app, port=12345)在您的javascript中,连接如下:
var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);最后,运行这个应用程序:
python2.7 whatever.py在这一点上,您的应用程序将启动和运行在任何领域,您指定的网站,您设置了几步后。
当您加载站点时,JS将整理来自document.domain和location.port的连接信息。如果打开浏览器的开发工具(Chrome检查器等),您将看到websockets连接到ws://yourdomain.com/。
希望这能帮上忙!
https://stackoverflow.com/questions/36168552
复制相似问题