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