我正在为与 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/