我有一个与Django频道进行通讯的React 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服务器的正确连接?
让我知道是否需要更多代码。我不确定还需要什么。
答案 0 :(得分:3)
我设法通过为移动WebSocket连接创建不同的通道路由来解决此问题。
(对于我的网站是/ws/
,对于应用程序是/mobile-ws/
)
我仍然不知道为什么使用与我的网站相同的终结点是一个问题,或者为什么它可以用于开发但不能用于生产。我很乐意得到比这更好的答案。