Flutter WebSocket 在 Web 应用程序中有效,但在 android 模拟器中无效
Flutter WebSocket works in web application but not in android emulator
'最终频道=WebSocketChannel.connect(
Uri.parse('wss://echo.websocket.org'),
);'
- 可以在网络应用程序中创建和连接
但无法在 android 模拟器
中连接
有两个实现 WebSocket 的库 class - 一个在 Web 上运行,另一个在 Android 上运行。
您可以通过创建一个简单的工厂函数来解决这个问题。您将需要创建几个文件:
websocket_client_factory.dart
export 'websocket_client_factory_null.dart'
if (dart.library.html) 'websocket_client_factory_web.dart'
if (dart.library.io) 'websocket_client_factory_server.dart';
websocket_client_factory_null.dart
import 'package:web_socket_channel/web_socket_channel.dart';
WebSocketChannel makeWsClient(String url) {
throw 'Platform not supported';
}
websocket_client_factory_server.dart
import 'package:web_socket_channel/io.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
WebSocketChannel makeWsClient(String url) =>
IOWebSocketChannel.connect(url, protocols: ['graphql-ws']);
websocket_client_factory_web.dart
import 'package:web_socket_channel/html.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
WebSocketChannel makeWsClient(String url) =>
HtmlWebSocketChannel.connect(url, protocols: ['graphql-ws']);
现在,从您的原始文件导入工厂文件,并调用工厂函数:
import 'package:./websocket_client_factory.dart';
...
var channel = makeWsClient(wssUrl);
- 在我的项目中WebSocket连接需要认证
- 在web应用中自动传递cookies和authentication token
网络套接字连接
- 但是在移动应用中我们需要设置cookies和身份验证
手动令牌
当我这样做时解决了我的问题
'最终频道=WebSocketChannel.connect( Uri.parse('wss://echo.websocket.org'), );'
- 可以在网络应用程序中创建和连接 但无法在 android 模拟器 中连接
有两个实现 WebSocket 的库 class - 一个在 Web 上运行,另一个在 Android 上运行。
您可以通过创建一个简单的工厂函数来解决这个问题。您将需要创建几个文件:
websocket_client_factory.dart
export 'websocket_client_factory_null.dart'
if (dart.library.html) 'websocket_client_factory_web.dart'
if (dart.library.io) 'websocket_client_factory_server.dart';
websocket_client_factory_null.dart
import 'package:web_socket_channel/web_socket_channel.dart';
WebSocketChannel makeWsClient(String url) {
throw 'Platform not supported';
}
websocket_client_factory_server.dart
import 'package:web_socket_channel/io.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
WebSocketChannel makeWsClient(String url) =>
IOWebSocketChannel.connect(url, protocols: ['graphql-ws']);
websocket_client_factory_web.dart
import 'package:web_socket_channel/html.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
WebSocketChannel makeWsClient(String url) =>
HtmlWebSocketChannel.connect(url, protocols: ['graphql-ws']);
现在,从您的原始文件导入工厂文件,并调用工厂函数:
import 'package:./websocket_client_factory.dart';
...
var channel = makeWsClient(wssUrl);
- 在我的项目中WebSocket连接需要认证
- 在web应用中自动传递cookies和authentication token 网络套接字连接
- 但是在移动应用中我们需要设置cookies和身份验证 手动令牌
当我这样做时解决了我的问题