首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WebFaction上通过mod_wsgi运行烧瓶-SocketIO

在WebFaction上通过mod_wsgi运行烧瓶-SocketIO
EN

Stack Overflow用户
提问于 2016-03-23 02:02:26
回答 1查看 2K关注 0票数 0

我已经使用mod_wsgi在have上部署了一个Flask应用程序。我的应用程序很简单,但是实现了Flask,这给我带来了麻烦。我的代码在本地主机上运行得很好,但是现在它已经在我的Web派系服务器上运行了,客户端无法连接到我的套接字。我不太清楚我的问题来自哪里-我假设我没有正确地设置我的apache配置文件,但这可能不是真的。

在客户端,我在对websocket的GET和POST调用中都会收到一个400 (不好的请求)错误。断断续续地看到一个警告,通知我在建立连接之前套接字已关闭。我还偶尔收到一个错误,说明在WebSocket握手过程中出现了一个错误。

我的apache httpd.conf文件如下:

代码语言:javascript
复制
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的帖子,但我不太确定是否需要它,如果需要的话,应该如何配置它。任何关于这个问题的指导都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 22:25:08

关于proxy_moduleproxy_http_module的内容是为了将Apache用作后端websockets应用程序的前端代理。它不适用于你想要做的事。

mod_wsgi并不适合服务websocket应用程序。不要使用它,而是使用Flask-SocketIO文档的部署部分中推荐的部署选项之一。

例如,要在WebFaction上使用第一个推荐选项(即嵌入式服务器),首先安装eventlet模块。我假设你现在已经安装了水瓶和酒瓶-SocketIO。

接下来,通过WebFaction控制面板安装一个“自定义websockets监听端口”应用程序。记下应用程序的指定端口,然后将应用程序分配到控制面板中的网站。您不需要打开应用程序的端口。

接下来,将您的Flask应用程序配置为在分配给您的websockets应用程序的端口上运行。最简单的方法是将端口传递给socketio.run,例如:

代码语言:javascript
复制
if __name__ == '__main__':
    socketio.run(app, port=12345)

在您的javascript中,连接如下:

代码语言:javascript
复制
var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);

最后,运行这个应用程序:

代码语言:javascript
复制
python2.7 whatever.py

在这一点上,您的应用程序将启动和运行在任何领域,您指定的网站,您设置了几步后。

当您加载站点时,JS将整理来自document.domainlocation.port的连接信息。如果打开浏览器的开发工具(Chrome检查器等),您将看到websockets连接到ws://yourdomain.com/

希望这能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36168552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档