Изучение связи WebSocket на полке: подробное руководство

WebSocket — это мощный протокол связи, обеспечивающий двунаправленную связь между клиентом и сервером в режиме реального времени. В этой статье мы углубимся в то, как интегрировать функциональность WebSocket в сервер Shelf, минималистичный веб-фреймворк для Dart. Мы рассмотрим различные методы и предоставим примеры кода, которые помогут вам начать работу. Итак, начнем!

  1. Метод 1: использование пакета shelf_web_socket
    Пакет shelf_web_socket предоставляет удобный способ обработки соединений WebSocket на сервере Shelf. Вы можете добавить его как зависимость в файл pubspec.yaml:

    dependencies:
    shelf_web_socket: ^0.2.0

    Вот пример его использования на вашем сервере Shelf:

    import 'package:shelf_web_socket/shelf_web_socket.dart';
    void main() {
    var handler = webSocketHandler((webSocket) {
    // Handle WebSocket connection
    webSocket.listen((message) {
      // Handle incoming messages
      print('Received message: $message');
      webSocket.add('You said: $message');
    });
    });
    var server = await shelf_io.serve(handler, 'localhost', 8080);
    print('Server running on ${server.address.host}:${server.port}');
    }
  2. Метод 2: реализация связи WebSocket вручную
    Если вы предпочитаете более индивидуальный подход, вы можете реализовать связь WebSocket вручную на своем сервере Shelf. Вот пример:

    import 'dart:async';
    import 'dart:convert';
    import 'package:shelf/shelf.dart' as shelf;
    import 'package:shelf/shelf_io.dart' as shelf_io;
    import 'package:shelf_web_socket/shelf_web_socket.dart';
    void main() {
    var handler = const shelf.Pipeline()
      .addMiddleware(shelf.logRequests())
      .addHandler(webSocketHandler((webSocket) {
    // Handle WebSocket connection
    webSocket.stream.listen((data) {
      var message = jsonDecode(data);
      // Handle incoming messages
      print('Received message: $message');
      webSocket.sink.add(jsonEncode({'response': 'You said: $message'}));
    });
    }));
    var server = await shelf_io.serve(handler, 'localhost', 8080);
    print('Server running on ${server.address.host}:${server.port}');
    }
  3. Метод 3. Защита соединений WebSocket с помощью SSL/TLS
    Если вам необходимо защитить соединения WebSocket с помощью SSL/TLS, вы можете использовать пакет Shelf_proxy вместе с пакетом Shelf_web_socket. Вот пример:

    import 'package:shelf_proxy/shelf_proxy.dart';
    import 'package:shelf_web_socket/shelf_web_socket.dart';
    void main() {
    var handler = const shelf.Pipeline()
      .addMiddleware(proxyHandler('https://example.com'))
      .addHandler(webSocketHandler((webSocket) {
    // Handle WebSocket connection
    webSocket.listen((message) {
      // Handle incoming messages
      print('Received message: $message');
      webSocket.add('You said: $message');
    });
    }));
    shelf_io.serve(handler, 'localhost', 8080).then((server) {
    print('Server running on ${server.address.host}:${server.port}');
    });
    }

Связь через WebSocket в Shelf обеспечивает гибкий и эффективный способ создания приложений реального времени. В этой статье мы рассмотрели различные методы, в том числе использование пакета shelf_web_socket, реализацию связи WebSocket вручную и защиту соединений WebSocket с помощью SSL/TLS. Используя эти методы, вы можете с легкостью создавать мощные и интерактивные веб-приложения.