I am currently using Django channels for websocket communication. I read 
this 
<https://django-websocket-redis.readthedocs.io/en/latest/running.html#django-with-websockets-for-redis-behind-nginx-using-uwsgi>
 article 
and it states that I should split the project into two uwsgi instances. It 
states that

"The web server undertakes the task of dispatching normal requests to one 
> uWSGI instance and WebSocket requests to another one"


Now I have two uwsgi instances running. This is how I am running both.

This uwsgi handles the normal django site requests
uwsgi --virtualenv /home/ec2-user/MyProjVenv --socket /home/ec2-user/
MyProjVenv/MyProjWeb/site1.socket --chmod-socket=777 --buffer-size=32768 --
workers=5 --master --module main.wsgi


This uwsgi handles the websocket requests
uwsgi --virtualenv /home/ec2-user/MyProjVenv --http-socket /home/ec2-user/
MyProjVenv/MyProjWeb/web.socket --gevent 1000 --http-websockets --workers=2 
--master --chmod-socket=777  --module main.wsgi_websocket

Now the websocket uwsgi launches  main.wsgi_websocket

The code for main.wsgi_websocket one is this
import os
import gevent.socket
import redis.connection
redis.connection.socket = gevent.socket
os.environ.update(DJANGO_SETTINGS_MODULE='main.settings')
from ws4redis.uwsgi_runserver import uWSGIWebsocketServer
application = uWSGIWebsocketServer()

Now after spinning up the two uwsgi instances I am able to access the 
website.The websocket uwsgi instance is also receiving data however I am 
not sure if its passing that data to the website uwsgi instance. I am using 
Django Channels here and this is the configuration I have specified in my 
settings for Django Channels

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [(redis_host, 6379)],
        },
       "ROUTING": "main.routing.channel_routing", 
    },
}

The channel routing is this
channel_routing = [
    include("chat.routing.websocket_routing", path=r"^/chat/stream"),
    include("chat.routing.custom_routing"),
]

and this is the websocket_routing which i have mentioned above



websocket_routing = [
    route("websocket.connect", ws_connect),


    # Called when WebSockets get sent a data frame
    route("websocket.receive", ws_receive),


    # Called when WebSockets disconnect
    route("websocket.disconnect", ws_disconnect),
]

Now the problem is that my ws_receive is never called. If I test on my 
local dev machine using  "*ipaddress:8000/chat/stream*" this works 
perfectly fine however I have no clue why my receive is not being called 
when I use *ipadress:80/ws/ *. I am certain that my other uwsgi instance is 
getting that data but I dont know how to find out if its passing it to the 
other uwsgi instance of the djnago side and if it is then why is my receive 
not being called ?. Any suggestions on this would definitely help




-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/4c4e57fa-c603-4be0-ba1a-cf1e9919fc09%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to