The docs do mention this in a big callout at the top of the Channel Layers page :) http://channels.readthedocs.io/en/latest/topics/channel_layers.html
Andrew
On Fri, Feb 2, 2018 at 8:52 PM, Ahmed Magdy <ahmedmgd715@gmail.com> wrote:
Aha thanks for making it clear, I will read more about redis then. Shouldn't the docs mention that though?--
On Saturday, February 3, 2018 at 6:47:47 AM UTC+2, Andrew Godwin wrote:No, there is no in-memory channel layer any more, only Redis is available at the moment. You must put something into the settings in order to make it function.AndrewOn Fri, Feb 2, 2018 at 8:42 PM, Ahmed Magdy <ahmed...@gmail.com> wrote:To view this discussion on the web visit https://groups.google.com/d/msI thought it uses in memory channel layer by default if it's empty? I didn't try setting a value, because only redis was available in v2.0.0 and I don't like using stuff I don't understand.--
On Saturday, February 3, 2018 at 6:08:02 AM UTC+2, Andrew Godwin wrote:It needs to contain a value to work - what value were you trying that was not empty?AndrewOn Fri, Feb 2, 2018 at 8:04 PM, Ahmed Magdy <ahmed...@gmail.com> wrote:To view this discussion on the web visit https://groups.google.com/d/msI tried not having CHANNEL_LAYERS or setting it to {}--
same exception
On Saturday, February 3, 2018 at 3:36:43 AM UTC+2, Andrew Godwin wrote:Do you have a CHANNEL_LAYERS setting in your settings file? If so, what is it set to?AndrewOn Fri, Feb 2, 2018 at 5:17 PM, Ahmed Magdy <ahmed...@gmail.com> wrote:To view this discussion on the web visit https://groups.google.com/d/msThat's what I did after reading the documentation here's how my channels files look like--# settings.py# ...ASGI_APPLICATION = 'djangoChannels.routing.application' # ...# routing.pyfrom django.conf.urls import urlfrom channels.routing import ProtocolTypeRouter, URLRouterfrom channels.auth import AuthMiddlewareStackfrom .consumers import ChatConsumerapplication = ProtocolTypeRouter({# Empty for now (http->django views is added by default)'websocket': AuthMiddlewareStack(URLRouter([url('^sessions/$', ChatConsumer)]))})# consumers.pyfrom asgiref.sync import AsyncToSyncfrom channels.generic.websocket import WebsocketConsumerclass ChatConsumer(WebsocketConsumer): def connect(self):AsyncToSync(self.channel_layer.group_add)( "chat", self.channel_name)def disconnect(self):AsyncToSync(self.channel_layer.group_discard)( "chat", self.channel_name)
After connecting with JS websocket tows://127.0.0.1:8000/sessions/
Raises an exceptionPerforming system checks...
System check identified no issues (0 silenced).
February 03, 2018 - 03:14:29
Django version 2.0.2, using settings 'djangoChannels.settings'
Starting ASGI/Channels development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
2018-02-03 03:14:29,799 - INFO - server - HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2018-02-03 03:14:29,800 - INFO - server - Listening on endpoint tcp:port=8000:interface=127.0.0.1
[2018/02/03 03:14:32] WebSocket HANDSHAKING /sessions/ [127.0.0.1:8631]
ERROR:root:Exception inside application: 'NoneType' object has no attribute 'group_add'
File "c:\python35\Lib\asyncio\tasks.py", line 241, in _step
result = coro.throw(exc)
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\ch annels\consumer.py", line 53, in __call__
await await_many_dispatch([receive], self.dispatch)
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\ch annels\utils.py", line 48, in await_many_dispatch
await dispatch(result)
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\as giref\sync.py", line 84, in inner
return await async_func(*args, **kwargs)
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\as giref\sync.py", line 67, in __call__
return await asyncio.wait_for(future, timeout=None)
File "c:\python35\Lib\asyncio\tasks.py", line 367, in wait_for
return (yield from fut)
File "c:\python35\Lib\asyncio\futures.py", line 358, in __iter__
yield self # This tells Task to wait for completion.
File "c:\python35\Lib\asyncio\tasks.py", line 290, in _wakeup
future.result()
File "c:\python35\Lib\asyncio\futures.py", line 274, in result
raise self._exception
File "c:\python35\Lib\concurrent\futures\thread.py", line 55, in run
result = self.fn(*self.args, **self.kwargs)
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\as giref\sync.py", line 76, in thread_handler
raise e
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\as giref\sync.py", line 74, in thread_handler
self.func(*args, **kwargs)
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\ch annels\consumer.py", line 93, in dispatch
handler(message)
File "D:\Programming\DjangoWebsite\HUWebsite\lib\site-packages\ch annels\generic\websocket.py", line 19, in websocket_connect
self.connect()
File "D:\Programming\DjangoWebsite\HUWebsite\husite\djangoChannel s\djangoChannels\consumers.py" , line 8, in connect
AsyncToSync(self.channel_layer.group_add)("chat", self.channel_name)
'NoneType' object has no attribute 'group_add'
[2018/02/03 03:14:32] WebSocket DISCONNECT /sessions/ [127.0.0.1:8631]
On Friday, February 2, 2018 at 7:37:36 PM UTC+2, Andrew Godwin wrote:Hi Ahmed,In the new release channel layers are optional - if you don't configure them they will indeed come through as None. The settings format changed slightly too - you can read more here: http://channels.readthedocs.io/en/latest/topics/ channel_layers.html AndrewOn Fri, Feb 2, 2018 at 3:31 AM, Ahmed Magdy <ahmed...@gmail.com> wrote:I'm relatively new to channels and was using Channels v1.x.x groups easily, but after v2.0.0 update and reading the documentation--
# This example uses WebSocket consumer, which is synchronous, and soEnter code here...
# needs the async channel layer functions to be converted.
from asgiref.sync import AsyncToSync
class ChatConsumer(WebsocketConsumer):
def connect(self):
AsyncToSync(self.channel_layer. group_add)("chat", self.channel_name)
def disconnect(self):
AsyncToSync(self.channel_layer. group_discard)("chat", self.channel_name)
channel_layer, channel_name are always NoneType and exception occurs.
Is that because I didn't configure channel layers? But in the old version I also used the in memory type and Groups were working well.
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...@googlegroups.com .
To post to this group, send email to django...@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/fff84d59-da69 .-47d5-a7c3-ee0221680642%40goog legroups.com
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 django-users...@googlegroups.com .
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .gid/django-users/8ca34830-d807 .-447c-836b-d2e52ee87b6d%40goog legroups.com
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...@googlegroups.com .
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .gid/django-users/d0fc9f6a-43f4 .-41c1-8a5e-b988a9fa7870%40goog legroups.com
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...@googlegroups.com .
To post to this group, send email to django...@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users .gid/django-users/fb9aa942-8d53 .-472c-bec0-a1c4a46171d3%40goog legroups.com
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+unsubscribe@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/3329c3e6- .a7db-4879-9b87-1c478ba4f0da% 40googlegroups.com
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+unsubscribe@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/CAFwN1uraV_QDxPqRhUu7R9k4BBVNsOr58BJz%2Bt1T-W0tazK05g%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment