报错“dart:htmlnotfound->cannotuseWebSockets
创始人
2024-11-23 02:00:27
0

这个问题是因为在 DART 的服务端代码中引用了 WebSockets,而 Dart 语言中 WebSockets 是通过 dart:html 模块来实现的,因此需要在文件头部添加“@HtmlImport('dart:html')”,让服务端能够使用此模块。

示例代码:

@HtmlImport('dart:html') import 'dart:io'; import 'package:logging/logging.dart'; import 'package:web_socket_channel/io.dart';

main() { Logger.root.onRecord.listen((LogRecord rec) { print('${rec.level.name}: ${rec.time}: ${rec.message}'); });

HttpServer.bind('localhost', 4040) .then((server) { server.listen((HttpRequest req) { if (req.uri.path == '/ws') { // Upgrade a HttpRequest to a WebSocket connection. WebSocketTransformer.upgrade(req).then((WebSocket socket) { print('Socket is upgraded');

      // Create a broadcast channel
      var channel = new IOWebSocketChannel(socket);
      channel.stream.listen((message) {
        print('Received: $message');
        channel.sink.add("Echoing back: $message");
      });

    });
  }

  serveRequest(req);
});

}); }

serveRequest(HttpRequest req) { HttpResponse res = req.response; var path = req.uri.path;

switch (path) { case '/': _serveHTML(res); break; default: _serveNotFound(res); } }

_serveHTML(HttpResponse res) { res.headers.add(HttpHeaders.CONTENT_TYPE, 'text/html'); res.write(''' WebSocket Example

WebSocket Example