Thanks for your reply. 

Here is the log information of daphne:
     2018-06-25 15:12:38,199 INFO     Starting server at 
tcp:port=8000:interface=0.0.0.0, channel layer 
experiment_platform.asgi:channel_layer.
     2018-06-25 15:12:38,200 INFO     HTTP/2 support not enabled (install 
the http2 and tls Twisted extras)
     2018-06-25 15:12:38,200 INFO     Using busy-loop synchronous mode on 
channel layer
     2018-06-25 15:12:38,201 INFO     Listening on endpoint 
tcp:port=8000:interface=0.0.0.0
     2018-06-25 15:12:38,201 INFO     HTTPFactory starting on 8000
     2018-06-25 15:12:38,202 INFO     Starting factory 
<daphne.http_protocol.HTTPFactory instance at 0x7f1a36681560
And it doesn't update after I do test on the website.

I thought runserver is for development and runworker is for production. Am 
I misunderstanding?...

On Monday, June 25, 2018 at 8:36:10 AM UTC-4, laixintao wrote:
>
> I haven't use Django's channel yet, but I guess that you route your url in 
> a wrong way. Somehow your websocket connection goes to your uWSGI server, 
> it should goes to your daphne server.
>
> Did your daphne receive any connection request?
>
> And you shouldn't use this on server:
>
> python manage.py runworker -v2 &
>
> It's for development use, I think. In your server you use uWSGI as HTTP 
> server and daphne as websocket server.
>
> <[email protected] <javascript:>>于2018年6月25日周一 上午9:29写道:
>
>> Hi I am deploying a website with a live discussion feature. But people 
>> cannot send nor receive messages on this discussion page. In the console it 
>> shows: "WebSocket connection to 'ws://xxxxxxxx/room1/' failed: Error during 
>> WebSocket handshake: Unexpected response code: 200"
>>
>> I don't know where the websocket bug (or bugs from other sources) is. I 
>> am attaching some information that I think might be helpful. Could someone 
>> help? If you think I miss some information please let me know and I will 
>> post! Thanks!!!!!!
>>
>>
>> *Server: ubuntu 14.03*
>> *nginx*
>> *commands to start the website:*
>>      uwsgi --socket experiment_platform.sock --module 
>> experiment_platform.wsgi --chmod-socket=666 --processes=6
>> daphne experiment_platform.asgi:channel_layer --port 8000 --bind 0.0.0.0 
>> -v2 &
>> python manage.py runworker -v2 &
>> [redis server is also activated.]
>>
>> *log information of uwsgi (it keeps updating similar things after the 
>> discussion page is opened, whether or not I am trying to send messages to 
>> test or not. I think it's trying to establish the websocket connection.)*
>> [pid: 29881|app: 0|req: 33/143] 100.15.133.125 () {52 vars in 1094 bytes} 
>> [Mon Jun 25 01:23:59 2018] GET /forum/room1/ => generated 4792 bytes in 55 
>> msecs (HTTP/1.1 200) 3 headers in 102 bytes (1 switches on core 0) [pid: 
>> 29885|app: 0|req: 29/144] 100.15.133.125 () {52 vars in 1094 bytes} [Mon 
>> Jun 25 01:24:29 2018] GET /forum/room1/ => generated 4792 bytes in 57 msecs 
>> (HTTP/1.1 200) 3 headers in 102 bytes (1 switches on core 0)
>>
>> *log information of runworker (it doesn't update after opening the 
>> discussion page.)*
>> 2018-06-25 00:22:42,827 - INFO - runworker - Running worker against 
>> channel layer default (asgi_redis.core.RedisChannelLayer)
>> 2018-06-25 00:22:42,828 - INFO - worker - Listening on channels 
>> http.request, websocket.connect, websocket.disconnect, websocket.receive
>>
>> *forum/consumers.py*
>> import re import json import logging from channels import Group from 
>> channels.sessions import channel_session from .models import Discussion, 
>> Statement, Vote from chat.models import Room from experiment.models import 
>> ExpUser,TaskUser, Crowd from channels.auth import http_session, 
>> http_session_user, channel_session_user, channel_session_user_from_http log 
>> = logging.getLogger(__name__) @channel_session_user_from_http 
>> @channel_session def ws_connect(message): # Extract the discussion-label 
>> from the message. This expects message.path to be of the # form 
>> forum/{label}/, and finds a Discussion if the message path is applicable, # 
>> and if the Discussion exists. Otherwise, bails (meaning this is a some 
>> othersort # of websocket). So, this is effectively a version of 
>> _get_object_or_404. try: log.debug('In the try block of ws_connect')#added 
>> by me prefix, label = message['path'].decode('ascii').strip('/').split('/') 
>> if prefix != 'forum': log.debug('invalid ws path=%s', message['path']) 
>> return if prefix == 'forum': discussion = 
>> Discussion.objects.get(label=label) except ValueError: log.debug('invalid 
>> ws path=%s', message['path']) return except Discussion.DoesNotExist: 
>> log.debug('ws discussion does not exist label=%s', label) return if prefix 
>> == 'forum': log.debug('forum connect discussion=%s client=%s:%s', 
>> discussion.label, message['client'][0], message['client'][1]) t = 
>> TaskUser(user=message.user,crowd=label,time_type='start') t.save() # Need 
>> to be explicit about the channel layer so that testability works # This may 
>> be a FIXME? Group('forum-'+label, 
>> channel_layer=message.channel_layer).add(message.reply_channel) 
>> message.channel_session['discussion'] = discussion.label 
>> message.reply_channel.send({ 'accept': True }) @channel_session_user 
>> @channel_session def ws_receive(message): if 'discussion' in 
>> message.channel_session: # Look up the room from the channel session, 
>> bailing if it doesn't exist try: label = 
>> message.channel_session['discussion'] discussion = 
>> Discussion.objects.get(label=label) except KeyError: log.debug('no 
>> discussion-forum in channel_session') return except 
>> Discussion.DoesNotExist: log.debug('recieved message, buy discussion does 
>> not exist label=%s', label) return try: expuser = 
>> ExpUser.objects.get(user=message.user) except KeyError: log.debug('problem 
>> getting username') return except ExpUser.DoesNotExist: log.debug('recieved 
>> message, but user does not exist label=%s', label) return # Parse out a 
>> chat message from the content text, bailing if it doesn't # conform to the 
>> expected message format. try: data = json.loads(message['text']) except 
>> ValueError: log.debug("ws message isn't json text=%s", text) return if 
>> data: if data['msg_type'] == 'vote': log.debug('vote handle=%s value=%s', 
>> expuser.nickname, data['value']) statement = 
>> Statement.objects.get(id=data['id']) m0 = statement.as_dict() 
>> log.debug('vote id=%s, score=%s, ups=%s, 
>> downs=%s',statement.id,statement.score,statement.ups,statement.downs) 
>> ndata = 
>> {'user':message.user,'handle':expuser.nickname,'statement':statement,'value':data['value']}
>>  
>> vote = None votes = 
>> Vote.objects.filter(user=message.user,statement=statement) if not votes: 
>> vote = Vote.objects.create(**ndata) else: vote = votes[0] vote.value = 
>> data['value'] vote.save() m = statement.update_score() m['msg_type'] = 
>> 'vote' log.debug('vote score=%s', m['score']) # See above for the note 
>> about Group Group('forum-'+label, 
>> channel_layer=message.channel_layer).send({'text': json.dumps(m)}) else: 
>> log.debug('chat message handle=%s message=%s', expuser.nickname, 
>> data['message']) parent = None log.debug(data['parentid']) if 
>> data['parentid']!=0: parent = 
>> discussion.statements.get(id=data['parentid']) log.debug(parent.id) 
>> data['parent'] = parent data.pop("msg_type",None) data['user'] = 
>> message.user data['handle'] = expuser.nickname data['crowd_label'] = 
>> discussion.crowd_label data['task_label'] = discussion.task_label m = 
>> discussion.statements.create(**data) # NEED TO FIX HERE # See above for the 
>> note about Group Group('forum-'+label, 
>> channel_layer=message.channel_layer).send({'text': 
>> json.dumps(m.as_dict())}) @channel_session_user @channel_session def 
>> ws_disconnect(message): if 'discussion' in message.channel_session: try: 
>> label = message.channel_session['discussion'] discussion = 
>> Discussion.objects.get(label=label) t = 
>> TaskUser(user=message.user,crowd=label,time_type='end') t.save() 
>> Group('forum-'+label, 
>> channel_layer=message.channel_layer).discard(message.reply_channel) except 
>> (KeyError, Discussion.DoesNotExist): pass
>>
>> *settings.py*
>> CHANNEL_LAYERS = { "default": { "BACKEND": 
>> "asgi_redis.RedisChannelLayer", "CONFIG": { "hosts": 
>> [os.environ.get('REDISTOGO_URL', 'redis://localhost:6379')], }, "ROUTING": 
>> "experiment_platform.routing.channel_routing", #"ROUTING": 
>> "waiting_room.routing.channel_routing", }, } CACHES = { "default": { 
>> "BACKEND": "django_redis.cache.RedisCache", "LOCATION": 
>> "redis://localhost:6379/1", "OPTIONS": { "CLIENT_CLASS": 
>> "django_redis.client.DefaultClient", } } }
>>
>> -- 
>> 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 [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> 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/f2bcc2be-7bf6-4947-b396-cc4feb44894b%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/f2bcc2be-7bf6-4947-b396-cc4feb44894b%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
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 [email protected].
To post to this group, send email to [email protected].
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/591a39ca-da5d-415f-9ed8-671a4f829b82%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to