node.js - Flutter Web 套接字示例应用程序未连接到本地 NestJS 服务器
问题描述
我试图让Flutter Web 套接字示例从 Android 模拟器中指向我的本地 NestJS 服务器时工作。以下是我尝试过的不同方法:
NestJS 服务器运行在http://127.0.0.1:3000
IOWebSocketChannel.connect('ws://echo.websocket.org')
- 这工作正常,但不是我的服务器。
IOWebSocketChannel.connect('ws://10.0.2.2:3000')
- 不工作。在我的笔记本电脑上从 Android 模拟器映射到 localhost 的 IP。得到以下错误: HttpException: Connection closed before full header was received, uri = http://10.0.2.2:3000
IOWebSocketChannel.connect('ws://192.168.1.16:3000')
- 不工作。192.168.1.16 是我笔记本电脑的 IP。得到以下错误: HttpException: Connection closed before full header was received, uri = http://192.168.1.16:3000
我也尝试过不同的模拟器和不同的安卓版本。它发生在 Android 模拟器、iOS 模拟器和连接到 Xcode 的实际 iPhone 上。我已经搜索了这个网站和其他网站,但没有任何运气。我没有尝试过的唯一解决方案是将我的 NestJS 服务器放在另一台机器或云中,并创建一个指向它的子域。我还在我的 NestJS 服务器上实现了请求日志记录,但我从未看到来自 Flutter 应用程序的任何活动。我可以通过浏览器很好地访问我的服务器,并且服务器上的 Web 套接字实现正在运行。让我觉得这是某种网络问题。
我也玩过构造函数参数:
IOWebSocketChannel.connect('ws://192.168.1.16:3000', 协议: ['websocket'])
不确定如何使用协议参数、Websocket、websocket、websockets 等。不确定我应该看到 HttpException 还是 SocketException。
基于 Flutter web socket 示例如何连接到本地服务器?我需要能够调试和测试这个应用程序。
更新:
只需在此处添加更多信息。我写了一个小控制台程序来尝试隔离它。
此代码有效:
void main() {
var channel = IOWebSocketChannel.connect('ws://echo.websocket.org');
channel.stream.listen((message) {
print('message: $message');
});
channel.sink.add('connected!');
}
此代码不会:
void main() {
var channel = IOWebSocketChannel.connect('ws://192.168.1.16:3000');
channel.stream.listen((message) {
print('message: $message');
});
channel.sink.add('connected!');
}
这是来自不起作用的代码的堆栈跟踪。ws://echo.websocket.org 是 Internet 上的测试 WebSocket 回显站点,192.168.1.16:3000 是在我的笔记本电脑上本地运行的 NestJs WebSocket 节点服务器(可以从使用 socket.io 的网页客户端工作)运行此客户端代码的位置。此代码直接从控制台运行,无需任何设备或模拟器,使用命令“dart ./websoket.dart”。我认为您可以排除模拟器、iOS 和 Android。
Unhandled exception:
WebSocketChannelException: WebSocketChannelException: HttpException: Connection closed before full header was received, uri = http://192.168.1.16:3000
#0 new IOWebSocketChannel._withoutSocket. (package:web_socket_channel/io.dart:84:24)
#1 _invokeErrorHandler (dart:async/async_error.dart:16:24)
#2 _HandleErrorStream._handleError (dart:async/stream_pipe.dart:282:9)
#3 _ForwardingStreamSubscription._handleError (dart:async/stream_pipe.dart:161:13)
#4 _RootZone.runBinaryGuarded (dart:async/zone.dart:1396:10)
#5 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:376:15)
#6 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:394:16)
#7 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:294:7)
#8 _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:812:19)
#9 _StreamController._addError (dart:async/stream_controller.dart:690:7)
#10 _RootZone.runBinaryGuarded (dart:async/zone.dart:1396:10)
#11 _BufferingStreamSubscription._sendError.sendError (dart:async/stream_impl.dart:376:15)
#12 _BufferingStreamSubscription._sendError (dart:async/stream_impl.dart:394:16)
#13 _BufferingStreamSubscription._addError (dart:async/stream_impl.dart:294:7)
#14 _SyncStreamControllerDispatch._sendError (dart:async/stream_controller.dart:812:19)
#15 _StreamController._addError (dart:async/stream_controller.dart:690:7)
#16 new Stream.fromFuture. (dart:async/stream.dart:178:18)
#17 _RootZone.runBinary (dart:async/zone.dart:1455:54)
#18 _FutureListener.handleError (dart:async/future_impl.dart:157:20)
#19 Future._propagateToListeners.handleError (dart:async/future_impl.dart:708:47)
#20 Future._propagateToListeners (dart:async/future_impl.dart:729:24)
#21 Future._completeError (dart:async/future_impl.dart:537:5)
#22 Future._asyncCompleteError. (dart:async/future_impl.dart:593:7)
#23 _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
#24 _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)
#25 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:118:13)
#26 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:169:5)
- 谢谢
解决方案
推荐阅读
- python - 根据某些正则表达式断言条件提取多行
- excel - 删除项目时 Excel 功能区 dropBox 不刷新列表
- angular - '[(ngModel)]' for field of object form inside another object
- excel - 使用“For each r in Intersect ...”和如果“r = item”找到匹配项;如何选择行中接下来的几个单元格以粘贴到不同的工作簿中?
- c# - 将 IQueryable 泛型转换为另一个 IQueryable 泛型
- xml - How to store XML text in variable
- c++ - difference between core connections and i/o threads in Datastax Cassandra C++ driver
- excel-formula - Comparing row values with table array
- python - Python - In a text file, strip a line containing a number greater than a certain value
- mysql - 无法使用 OneToMany 关系添加新记录