Клиент WebSocket в Dart
Клиент открывают через WebSocket.connect
со строкой адреса и схемой ws. Метод
возвращает Future: после await
рукопожатие завершено и соединение готово к обмену
строками.
Отправка текста - вызов add с английской
фразой. Сервер в фоне принимает кадр; клиент может
не обрабатывать ответ, если задача - только
доставка:
import 'dart:async';
import 'dart:io';
void main() async {
var sent = Completer<void>();
var httpServer = await HttpServer.bind(
InternetAddress.loopbackIPv4,
0,
);
var port = httpServer.port;
httpServer.listen((request) async {
if (WebSocketTransformer.isUpgradeRequest(
request,
)) {
var socket = await WebSocketTransformer.upgrade(
request,
);
socket.listen((data) {
sent.complete();
});
}
});
var client = await WebSocket.connect(
'ws://127.0.0.1:$port',
);
client.listen((data) {});
client.add('ping');
await sent.future;
await client.close();
await httpServer.close(force: true);
}
Адрес собирают после привязки сервера: порт
подставляют в строку ws://127.0.0.1:….
Другой текст кладут в add без смены
остального каркаса:
import 'dart:async';
import 'dart:io';
void main() async {
var sent = Completer<void>();
var httpServer = await HttpServer.bind(
InternetAddress.loopbackIPv4,
0,
);
var port = httpServer.port;
httpServer.listen((request) async {
if (WebSocketTransformer.isUpgradeRequest(
request,
)) {
var socket = await WebSocketTransformer.upgrade(
request,
);
socket.listen((data) {
sent.complete();
});
}
});
var client = await WebSocket.connect(
'ws://127.0.0.1:$port',
);
client.listen((data) {});
client.add('hello');
await sent.future;
await client.close();
await httpServer.close(force: true);
}
Подключитесь к локальному серверу и передайте
строку "time". Сервер должен принять
один кадр.
Отправьте на localhost текст "job 3"
после успешного рукопожатия.