如何确保可写标志在 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 因此很难判断。
我正在为 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 因此很难判断。