У меня возникли проблемы со связью через WebSocket в моем приложении Flutter. Сервер (использующий Netty) успешно получает идентификатор пользователя и отвечает сообщением, но клиент Flutter WebSocket не может получать какие-либо сообщения от сервера.
Что я уже сделал:
Серверная сторона (Netty WebSocket Server) Код:
Сервер создан с использованием Netty, а сервер WebSocket настроен следующим образом:
public class WebSocketServer {
private final int port;
public WebSocketServer(int port) {
this.port = port;
}
public void start() throws InterruptedException {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer() {
@Override
protected void initChannel(SocketChannel socketChannel) {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new HttpObjectAggregator(65536));
pipeline.addLast(new ChunkedWriteHandler());
pipeline.addLast(new WebSocketServerProtocolHandler("/ws"));
pipeline.addLast(new WebSocketFrameHandler());
}
})
.option(ChannelOption.SO_BACKLOG, 128)
.childOption(ChannelOption.SO_KEEPALIVE, true);
Channel channel = serverBootstrap.bind(port).sync().channel();
System.out.println("WebSocket Server started on port " + port);
channel.closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
// WebSocketFrameHandler handles the incoming WebSocket frames.
public class WebSocketFrameHandler extends SimpleChannelInboundHandler {
@Override
protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) {
// Print client info
System.out.println("New client connected with userId: 1234 and assigned connectionId: " + ctx.channel().id().asLongText());
// Send a message to the client
ctx.channel().writeAndFlush(new TextWebSocketFrame("Welcome user 1234! Your connection ID is: " + ctx.channel().id().asLongText()));
}
}
public static void main(String[] args) throws InterruptedException {
new WebSocketServer(8080).start();
}
Сервер работает на ws://localhost:8080/ws и отправляет ответ «Добро пожаловать, пользователь 1234! Ваш идентификатор подключения: : "клиенту.
Код клиента Flutter:
Во Flutter я использую WebSocketChannel для подключения к серверу WebSocket и прослушивания сообщений:
Соединение WebSocket успешно установлено между клиентом Flutter и Сервер Netty.
Клиент Flutter может отправлять сообщения на сервер, но не получает никаких сообщений обратно от сервера.
На сервере стороне, я вижу, что вызывается метод writeAndFlush и сообщение отправляется в клиент. Однако клиент Flutter не получает ответ. Что я пробовал:
Проверил журналы сервера. Сервер правильно регистрирует, что клиент подключен, и сообщение отправляется клиенту.
Подтвержденный URL-адрес WebSocket — я использовал правильный URL-адрес WebSocket. (ws://localhost:8080/ws?userId=1234).
Проверил клиент Flutter WebSocket – я использовал WebSocketChannel для подключения и прослушивания потока, но данные не получены в обратный вызов onData.
Использовал операторы print() во Flutter для отладки входящего сообщения, но оно никогда не печаталось. Вопросы:
Почему клиент Flutter не получает сообщения, отправленные сервером?
Есть ли какие-либо конкретные конфигурации WebSocket, которые мне нужно проверить или изменить либо на клиенте Flutter, либо на стороне сервера?
Существует ли известная проблема со связью WebSocket между сервером Netty и Flutter? Среда:
Версия Flutter: 3.x.x
Библиотека WebSocket: web_socket_channel
Сервер: сервер WebSocket на базе Netty
Среда тестирования: эмулятор Android/iOS (с локальным хостом или физическим устройством с IP-адресом)
У меня возникли проблемы со связью через WebSocket в моем приложении Flutter. Сервер (использующий Netty) успешно получает идентификатор пользователя и отвечает сообщением, но клиент Flutter WebSocket не может получать какие-либо сообщения от сервера. Что я уже сделал: Серверная сторона (Netty WebSocket Server) Код: Сервер создан с использованием Netty, а сервер WebSocket настроен следующим образом: [code]public class WebSocketServer {
private final int port;
public WebSocketServer(int port) { this.port = port; }
public void start() throws InterruptedException { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup();
Channel channel = serverBootstrap.bind(port).sync().channel(); System.out.println("WebSocket Server started on port " + port); channel.closeFuture().sync(); } finally { bossGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } }
// WebSocketFrameHandler handles the incoming WebSocket frames. public class WebSocketFrameHandler extends SimpleChannelInboundHandler { @Override protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) { // Print client info System.out.println("New client connected with userId: 1234 and assigned connectionId: " + ctx.channel().id().asLongText());
// Send a message to the client ctx.channel().writeAndFlush(new TextWebSocketFrame("Welcome user 1234! Your connection ID is: " + ctx.channel().id().asLongText())); } }
public static void main(String[] args) throws InterruptedException { new WebSocketServer(8080).start(); } [/code]
Сервер работает на ws://localhost:8080/ws и отправляет ответ «Добро пожаловать, пользователь 1234! Ваш идентификатор подключения: : "клиенту. Код клиента Flutter: Во Flutter я использую WebSocketChannel для подключения к серверу WebSocket и прослушивания сообщений: [code]import 'package:web_socket_channel/web_socket_channel.dart';
class SocketWithNetty extends StatefulWidget { const SocketWithNetty({super.key});
@override State createState() => _SocketIoNewState(); }
class _SocketIoNewState extends State { late WebSocketChannel _channel; late TextEditingController _controller; String _message = '';
[/code] [b]Проблема:[/b] [list] [*]Соединение WebSocket успешно установлено между клиентом Flutter и Сервер Netty. [*]Клиент Flutter может отправлять сообщения на сервер, но не получает никаких сообщений обратно от сервера. [*]На сервере стороне, я вижу, что вызывается метод writeAndFlush и сообщение отправляется в клиент. Однако клиент Flutter не получает ответ. [b]Что я пробовал:[/b] [*]Проверил журналы сервера. Сервер правильно регистрирует, что клиент подключен, и сообщение отправляется клиенту. [*]Подтвержденный URL-адрес WebSocket — я использовал правильный URL-адрес WebSocket. (ws://localhost:8080/ws?userId=1234). [*]Проверил клиент Flutter WebSocket – я использовал WebSocketChannel для подключения и прослушивания потока, но данные не получены в обратный вызов onData. [*]Использовал операторы print() во Flutter для отладки входящего сообщения, но оно никогда не печаталось. [b]Вопросы:[/b] [*]Почему клиент Flutter не получает сообщения, отправленные сервером? [*]Есть ли какие-либо конкретные конфигурации WebSocket, которые мне нужно проверить или изменить либо на клиенте Flutter, либо на стороне сервера? [*]Существует ли известная проблема со связью WebSocket между сервером Netty и Flutter? [b]Среда:[/b] [*]Версия Flutter: 3.x.x [*]Библиотека WebSocket: web_socket_channel [*]Сервер: сервер WebSocket на базе Netty [*]Среда тестирования: эмулятор Android/iOS (с локальным хостом или физическим устройством с IP-адресом) [/list]
У меня проблема транзитивной зависимости с Azure и использованием Netty.
Сводка дерева:
Проект A > зависит от пользовательской библиотеки B > зависит от Azure > зависит от Netty .
Библиотека B нормально (например, с модульными/интеграционными...
У меня есть сервер WebSocket в Java с использованием Spring Boot. Я собираюсь написать клиент C Websocket для подключения к этому серверу для двунаправленного соединения. Я не мог найти примеров этого онлайн, может ли кто -нибудь помочь мне с с чего...
У меня есть сервер WebSocket в Java с использованием Spring Boot. Я собираюсь написать клиент C Websocket для подключения к этому серверу для двунаправленного соединения. Я не мог найти примеров этого онлайн, может ли кто -нибудь помочь мне с с чего...
Я пытаюсь реализовать систему WebSocket. На сервере я правильно настроил WebSocket и службу отправки сообщений. Клиент React без проблем подключается к WebSocket, но проблема в том, что он не может перехватывать сообщения, отправленные сервером.
Вот...
Мне нужно отправить сообщение клиенту, но не как ответ на его сообщение.
Другими словами - я делаю какую -то бизнес -логику на своем сервере, и когда я получу результат, я хочу отправить его всем клиентам. Я пытался с Redis, вещанием, прослушиванием...