Рубрики
Flutter

Вебсокеты во Flutter

Вебсокеты — это технология, которая позволяет установить постоянное двустороннее соединение между клиентом и сервером. Это позволяет серверу отправлять данные клиенту в режиме реального времени, без необходимости для клиента постоянно обновлять страницу. В Flutter можно использовать пакет web_socket_channel, который предоставляет инструменты для работы с вебсокетами.

Прежде чем начать использовать вебсокеты, необходимо установить соединение с сервером. Для этого можно использовать конструктор WebSocketChannel.connect из пакета web_socket_channel. Например:

import 'package:web_socket_channel/io.dart';

final channel = IOWebSocketChannel.connect('ws://localhost:1234');

Этот код устанавливает соединение с сервером по адресу ws://localhost:1234.

После установления соединения можно начать отправлять и получать данные с сервера. Для отправки данных можно использовать метод sink.add, а для получения данных — стрим stream.

channel.sink.add('Hello, server!');
channel.stream.listen((message) {
  print('Received: $message');
});

Этот код отправляет сообщение Hello, server! на сервер и выводит в консоль все сообщения, которые приходят с сервера.

Чтобы убедиться, что соединение остается открытым на протяжении суток, необходимо обрабатывать ошибки соединения и переподключаться к серверу в случае его отключения. Для этого можно использовать метод WebSocketChannel.sink.done, который возвращает Future, который выполнится, когда соединение будет закрыто. В обработчике этого Future можно производить повторное соединение с сервером. Например:

void startWebSocket() {
  final channel = IOWebSocketChannel.connect('ws://localhost:1234');
  channel.stream.listen((message) {
    print('Received: $message');
  }, onError: (error) {
    print('Error: $error');
    Future.delayed(Duration(seconds: 5), () => startWebSocket());
  }, onDone: () {
    print('Done!');
    Future.delayed(Duration(seconds: 5), () => startWebSocket());
  });
}

Этот код устанавливает соединение с сервером при помощи вебсокет и обрабатывает ошибки соединения и переподключается к серверу в случае его отключения.

Надеюсь, эта информация окажется полезной для вас!