如何确保可写标志在 send() 之前为真?

How can I ensure the writable flag is true before send()?

我正在为 Dart WebSocket 创建一个抽象层,它也与 Socket.IO 协议兼容,但它有一个我无法解决的问题。

下面的代码将 HttpRequest 转换为 WebSocket 并将套接字实例保存在传输...在这里你可以看到我将 writable 标志的值更改为 true 以通知套接字是打开。

WebSocketTransformer.upgrade(req).then((socket) {
  this._socket = socket;
  this.writable = true;

  this._socket.handleError(() {
    this.onClose();
  });

  // start listen the socket;
  socket.listen((packet) {
    this.onData(packet);
  });
}).catchError((Exception e) {
  this.onError('Can\'t conenct with the socket.', e.toString());
});

(完整代码可参考here。)

当我首先调试代码时,调试器在该闭包内停止,然后才在此处停止,进行检查但 writable 仍然为 false :/

void flush([_]) {
  if (this._readyState != SocketStates.closed && this.transport.writable &&
      !this._writeBuffer.isEmpty) {

(完整代码可参考here) 我真的需要帮助...

您的构造函数进行了异步调用,但没有 return 未来(在构造函数中不可能)

WebSocketTransformer.upgrade(req).then

使用静态方法代替 returns Future<WebSocketTransformer> 或使用 init 方法,在创建后初始化 class。 可能还有其他问题,但您的代码没有显示您如何使用 class 因此很难判断。