you could send  message to channel "mqtt" that defined in routing.py via 
django channels usage

Andrea Conti於 2019年5月2日星期四 UTC+8下午11時17分02秒寫道:
>
>
> First of all, thanks for responding.
>
> While the example does route the incoming MQTT messages to a consumer, the 
> consumer is still in the same process as the MQTT client, i.e. the one 
> started with "runmqttworker" management command.
>
> What I am trying to do is tohandle those events within another process.
>
> Andrea
>
> On Thursday, May 2, 2019 at 2:33:01 PM UTC+2, Fly Style wrote:
>>
>>
>> have a try  of https://github.com/ruralscenery/channels_mqtt
>>
>> Andrea Conti於 2019年5月2日星期四 UTC+8下午7時40分20秒寫道:
>>>
>>> Hello,
>>>
>>> I am trying to use Channels 2 to implement an http/websocket application 
>>> which also handles asynchronous requests from  a second source (right now 
>>> it's messages from an MQTT subscription, but I think the problem is largely 
>>> independent from the specific protocol). This doesn't seem to be a common 
>>> use case, and I could not find any indication on how to do that, either in 
>>> the official Channels documentation or elsewhere
>>>
>>> Given that I must handle the contents of the MQTT messages in the same 
>>> process as the websocket requests, the ideal approach would be to run both 
>>> the http/websocket and the MQTT protocol handlers in the same process, but 
>>> I am quite certain I can't do that.
>>>
>>> My next thought would then be to have a second process for handling the 
>>> incoming messages and sending them to the main application as events over a 
>>> channel layer. 
>>>
>>> For the MQTT side, leaving the specific protocol aside, I have seen 
>>> examples using asgiref.server.StatelessServer (e.g. 
>>> https://github.com/andrewgodwin/asgigram), but that ends up creating a 
>>> scope from the event and passing it to an ASGI application instance -- i.e. 
>>> it handles the events in-process, which is not what I want.
>>>
>>> Then there's https://github.com/xavierlesa/channels-asgi-mqtt. The code 
>>> looks a bit messy, and I think it's been written for Channels 1, but the 
>>> principle seems clear: retrieve the default channel layer and for every 
>>> incoming message, send an event of a specific type to a channel with a 
>>> specific name.
>>>
>>> But then, how do I receive and handle events from the channel in the 
>>> websocket process? 
>>> https://channels.readthedocs.io/en/latest/topics/channel_layers.html 
>>> says that "Messages across channel layers also go to consumers/ASGI 
>>> application instances, just like events from the client", and 
>>> https://channels.readthedocs.io/en/latest/topics/worker.html seems to 
>>> imply that such events are simply available to the main ASGI application -- 
>>> but that relies on a having a dummy protocol handler 
>>> (channels.worker.Worker) subscribe to a set of channels and wrap each event 
>>> in a scope which is then passed to the ASGI application. So, once again 
>>> that would seem to require a second protocol handler besides the 
>>> http/websocket one. 
>>>
>>> Am I missing something?
>>>
>>> Any Ideas, corrections and pointers to relevant documentation and 
>>> examples are welcome.
>>>
>>> Thanks in advance,
>>> Andrea
>>>
>>

-- 
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/c0d57dbf-d8d6-41e1-a04c-84481ab82bca%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to