这个问题是因为在 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('''