kidsoul
1 question(s)
1 answer(s)
Avatar
0
kidsoul Beginner
kidsoul Beginner
Client không nhận được message từ socket server nếu server chủ động gửi message
<div class="markdown-block">Mình đang phát triển tính năng chat giữa các devices trên Flutter gặp một lỗi như sau, google vẫn chưa ra hoặc chưa đúng keyword; không biết anh/chị/bạn nào từng gặp phải thì gợi ý cho mình với ạ. Xin cảm ơn mọi người!!! Tại server, mình dùng shelf để tạo websocket, xử lý các request từ client:</div><div class="markdown-block">final routerHandler = shelf_router.Router()</div><div class="markdown-block">..get('/message', (request) =&gt; handleWs(request));</div><div class="markdown-block">Cascade cascade = Cascade()</div><div class="markdown-block">.add(routerHandler)</div><div class="markdown-block">var handler = const Pipeline().addHandler(cascade.handler);</div><div class="markdown-block">await shelf_io.serve(handler, ipAddress, port)</div><div class="markdown-block">FutureOr&lt;Response&gt; handleWs(Request request) {</div><div class="markdown-block">final channels = &lt;WebSocketChannel&gt;[];</div><div class="markdown-block">return ws.webSocketHandler((WebSocketChannel channel) {</div><div class="markdown-block">channels.add(channel);</div><div class="markdown-block">channel.stream.listen((message) {</div><div class="markdown-block">try {</div><div class="markdown-block">final receivedMessage = Message.fromJson(json.decode(message));</div><div class="markdown-block">final updatedMessage = receivedMessage.copyWith(messageState: MessageState.sent);</div><div class="markdown-block">final response = json.encode(updatedMessage.toJson());</div><div class="markdown-block">for (final c in channels) {</div><div class="markdown-block">c.sink.add(response);</div><div class="markdown-block">}</div><div class="markdown-block">} catch (e) {</div><div class="markdown-block">debugPrint('Error while handling incoming message in socket: ');</div><div class="markdown-block">}</div><div class="markdown-block">}, onDone: () =&gt; c</div>
Answer