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



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

下面的代码将HttpRequest转换为WebSocket,并将socket实例保存在Transport…在这里,您可以看到我将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());
});

(完整的代码可以在这里找到)

当我首先调试代码时,调试器停止在闭包内,然后停止在这里,检查是做的,但writable仍然为假:/

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

(完整的代码可以在这里找到)我真的需要帮助…

您的构造函数进行异步调用,但不返回future(在构造函数中不可能)

WebSocketTransformer.upgrade(req).then

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

相关内容

  • 没有找到相关文章

最新更新