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

标签 websocket dart dart-async

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

以下代码将 HttpRequest 转换为 WebSocket 并将套接字实例保存在 Transport... 这里你可以看到我更改了 writable 的值flag 为 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。)

当我首先调试代码时,调试器在该闭包内停止,然后才停在这里,检查是 make 但 writable仍然是错误的:/
void flush([_]) {
  if (this._readyState != SocketStates.closed && this.transport.writable &&
      !this._writeBuffer.isEmpty) {

(完整代码可以创建here)
我真的需要帮助...

最佳答案

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

WebSocketTransformer.upgrade(req).then

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

关于websocket - 如何在 send() 之前确保可写标志为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513383/

相关文章:

dart - 我如何在 Dart 中执行相当于 setTimeout + clearTimeout 的操作?

websocket - 为什么客户端 websocket 关闭代码与服务器代码不匹配?

build - Dartium 使用 ffmpeg 在 Windows 上构建

javascript - 将 javascript 客户端连接到 python websocket 服务器

flutter - 如何在flutter中格式化或分离textformfield部分

android - flutter 。使用主题,如何更改滚动偏移颜色?

dart - 为什么 onError 处理程序不在 Http.call() future 触发?

Dart future (CSS 动画)

javascript - HTML5 + Javascript : Networking for a game

JavaScript : dynamically changing the colour of messages