django - 与 Django Channels 的 React native Websocket 连接已打开,但没有消息通过

标签 django react-native websocket django-channels

我有一个与 Django channel 通信的 native 应用程序(android)。通过 ws 连接到我的开发服务器时,一切正常。
但是,当我尝试连接到我的远程 wss服务器使用相同的代码,没有任何东西通过。

套接字连接显示为 OPEN .我什至第一次收到 "connected"从服务器发送到我的应用程序的消息:

class RGConsumer(AsyncWebsocketConsumer):
    rooms = []

    async def connect(self):
        self.rooms = []
        await self.join_room('all')
        await self.accept()
        await self.send(text_data=json.dumps({'event': 'connected'}))

    async def join_room(self, room_name):
        if room_name not in self.rooms:
            self.rooms.append(room_name)
            await self.channel_layer.group_add(
                room_name,
                self.channel_name
            )

问题是除了这第一条消息之外,没有其他任何东西通过。
例如,我通过此函数发送的任何内容都不会被应用程序接收:
def send_to_all(event, data=None):
    message = {'type': 'channel_event', 'message': {'event': event, 'data': data}}
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)(
        'all',
        message
    )

以同样的方式,当我调用 websocket.send在我的应用程序上,receive我的消费者的功能根本没有被触发。

再一次,这在我的本地服务器上工作得很好,所以我假设代码是正确的。仅当将应用程序连接到生产 wss停止工作的服务器(除了第一条被广泛接受的 connected 消息)

此外,即使是 websocket.onclose如果我决定重新启动生产服务器,则不会调用函数。

是否有任何其他设置可以正确连接到我可能丢失的 wss 服务器?

让我知道是否需要更多代码。我不确定还需要什么。

最佳答案

我设法通过为移动 WebSocket 连接创建不同的 channel 路由来解决它。

(/ws/ 用于我的网站,/mobile-ws/ 用于应用程序)

我仍然不知道为什么使用与我的网站相同的端点是一个问题,或者为什么它在开发中起作用而不是在生产中起作用。我很乐意接受比这更好的答案。

关于django - 与 Django Channels 的 React native Websocket 连接已打开,但没有消息通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56397779/

相关文章:

python - 如何解决运行 conda django 虚拟环境的问题?

DjangoRestFramework - 如何检查 valied_data 中是否存在可选的序列化程序字段?

javascript - Redux 操作不存在

react-native - 在 React Native 的默认模式中模糊

ruby-on-rails - Actioncable 计数订阅

javascript - 创建 PHP websockets 服务器

django - 我可以在条件扩展页面中使用 djangocms 插件吗?

react-native - 设置其依赖的状态后,使用usecallback定义的调用函数

Angular 4 RxJs WebSocket

python - Django、Redis : Where to put connection-code