Ich bin ein Django-Projekt, das gevent-socketio verwendet.gevent-socketio nginx uwsgi funktioniert nicht zusammen auf dem Entwicklungsserver
Aus irgendeinem Grund auf meinem Entwicklungsserver, alle meine websockets Anfragen geben eine 101 pending
Nachricht, bei der socketio wird durch alle anderen Protokolle Zyklus, die in einen pending
Status führen.
Der Fehler in meinen uwsgi Protokollen ist:
2013/05/23 16:09:08 [error] 14485#0: *85 upstream timed out (110: Connection timed out) while reading upstream, client: x.x.x.x, server: dev.proj.co, request: "GET /socket.io/1/xhr-polling/116404981619?t=1369325348489 HTTP/1.1", upstream: "http://127.0.0.1:4042/socket.io/1/xhr-polling/116404981619?t=1369325348489", host: "dev.proj.co", referrer: "http://dev.proj.co/map/bycon/"
Lokal, ich dieses Problem nicht. Ich starte den Server python run.py
run.py auf meinem lokalen Umgebung
#!/usr/bin/env python
import os
import sys
from gevent import monkey
monkey.patch_all()
import django.core.handlers.wsgi
from socketio.server import SocketIOServer
import os
PORT = 8000
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "proj.settings")
application = django.core.handlers.wsgi.WSGIHandler()
PROJECT_DIR = os.path.realpath(os.path.dirname(__file__))
sys.path.insert(0, PROJECT_DIR)
sys.path.insert(0, os.path.join(PROJECT_DIR, "chat"))
if __name__ == '__main__':
SocketIOServer(('', PORT), application, resource="socket.io").serve_forever()
Auf meinem Entwicklungsserver mit, wo der Fehler auftritt, habe ich die folgenden Einstellungen:
nginx.conf
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
upstream django {
server 127.0.0.1:4042;
}
server {
listen 80;
server_name dev.proj.co;
charset utf-8;
access_log /var/log/nginx/myproj_dev.access.log;
error_log /var/log/nginx/myproj_dev.error.log;
location /media/ {
alias /var/www/dev/myproj/releases/myproj_public/media/;
error_page 404 = /404;
expires 30d;
}
location /static/ {
alias /var/www/dev/myproj/releases/myproj_public/static/;
error_page 404 = /404;
expires 30d;
}
location/{
proxy_pass http://127.0.0.1:4042;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
}
uwsgi_dev.ini
[uwsgi]
if-env = PROJECT_HOME
print = Your path is %(_)/current
chdir = %(_)/current
touch-reload = %(_)/current/myproj/uwsgi_dev.ini
daemonize = %(_)/myproj_uwsgi/myproj.log
endif =
if-env = VIRTUAL_ENV
print = Your virtualenv is %(_)
virtualenv = %(_)
endif =
gevent = 100
processes = 4
module = myproj.wsgi_dev
env = DJANGO_SETTINGS_MODULE=myproj.settings.dev
master = True
vacuum = True
max-requests = 5000
logdate = True
# newrelic requirements
enable-threads = True
single-interpreter = True
wsgi_dev.py
import os
from gevent import monkey
monkey.patch_all()
from socketio.server import SocketIOServer
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproj.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
PORT = 4042
SocketIOServer(("127.0.0.1", PORT), application, \
resource="socket.io").serve_forever()
Weitere Informationen:
I'm using uwsgi 1.9.6, gevent-websocket 0.3.6, greenlet 0.4.0 and the dev version of gevent(-e git://github.com/surfly/[email protected]#egg=gevent-dev) and gevent-socketetio (-e git://github.com/abourget/[email protected]#egg=gevent_socketio-dev)
[[email protected] ~]# nginx -v
nginx version: nginx/1.4.1
Können Sie vielleicht versuchen Sie es mit einem Prozess ausgeführt wird und sehen, ob das Problem weiterhin besteht? Ich habe auch Probleme mit gevent-socketio mit mehreren Mitarbeitern mit Gunicorn, nicht sicher, ob es verwandt ist https://github.com/abourget/gevent-socketio/issues/132?source=cc. Außerdem scheint uwsgi mit gevent sehr buggy zu sein ... https://github.com/abourget/gevent-socketio/issues/81?source=cc –
@BernhardVallant Danke für den Kommentar. Die Gunicorn-Verbindung war sehr hilfreich.Ich habe jetzt nicht viel Zeit, dies zu debuggen, aber wenn ich das tue, werde ich versuchen, daran zu denken, diesen Beitrag zu aktualisieren. – super9
@ super9 Ich weiß, das ist eine alte Frage, aber ich frage mich, ob Sie jemals gelöst haben, was Ihnen den Fehler gab? Ich habe derzeit ein ähnliches Problem. – jbll