使用Dart WebSocket服务器支持WebSocket关闭原因

4
我将使用Dart的WebSocket类(包括dart:io和dart:html版本)来连接Dart WebSocket服务器。当我让客户端使用自定义关闭代码和原因关闭web socket连接时,自定义代码正确设置,但自定义关闭原因未设置。

这是一个简化的测试案例:

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..');
}

test.dart

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.

第一个 WebSocket(连接到本地 Dart 服务器的 WebSocket)连接并关闭,但关闭原因缺失(空字符串)。第二个 WebSocket(连接到 echo.websocket.org 的 WebSocket)连接并关闭,关闭代码和原因都设置正确。
不能是客户端连接方式的问题,因为两种情况完全相同。那么这是我设置 Dart WebSocket 的方式的问题吗?还是 WebSocketTransformer/WebSocket 类中存在 bug?
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接