我正在使用Dart的WebSocket类(dart:io和dart:html版本)连接到Dart WebSocket服务器。当我让客户使用自定义关闭代码和原因关闭Web套接字连接时,自定义代码设置正确,但自定义关闭原因未设置。
这是一个简化的测试用例:
server.dart
library server;
import 'dart:io';
main() async {
HttpServer server = await HttpServer.bind('localhost', 8081);
server
.transform(new WebSocketTransformer())
.listen((WebSocket webSocket) {
print('WebSocket opened.');
webSocket.listen((_) {}, onDone: () {
print('WebSocket closed.');
});
});
print('Listening..');
}
测试飞镖
library test;
import 'dart:io';
main() async {
WebSocket webSocket1 = await WebSocket.connect('ws://localhost:8081');
webSocket1.listen((_) {}, onDone: () {
print('Local Dart ws connection: closed with\n\t' +
'code: ${webSocket1.closeCode}\n\t' +
'reason: ${webSocket1.closeReason}');
});
webSocket1.close(4001, 'Custom close reason.');
WebSocket webSocket2 = await WebSocket.connect('ws://echo.websocket.org');
webSocket2.listen((_) {}, onDone: () {
print('echo.websocket.org connection: closed with\n\t' +
'code: ${webSocket2.closeCode}\n\t' +
'reason: ${webSocket2.closeReason}');
});
webSocket2.close(4001, 'Custom close reason.');
}
标准输出
Local Dart ws connection: closed with
code: 4001
reason:
echo.websocket.org connection: closed with
code: 4001
reason: Custom close reason.
第一个Web套接字(连接到本地Dart服务器的Web套接字)连接并关闭,但是缺少关闭原因(空白字符串)。第二个Web套接字(一个连接到echo.websocket.org的套接字)连接并关闭,并且关闭代码和原因均已正确设置。
客户端连接的方式不会有问题,因为这两种情况都是相同的。那么我设置Dart WebSocket的方式是否有问题?还是WebSocketTransformer / WebSocket类中的错误?
dart-lang / sdk新增了此功能:https : //github.com/dart-lang/sdk/issues/23964
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句