Flutter 中的 WebSockets 问题
Trouble with WebSockets in Flutter
我在 flutter 应用程序中实现 WebSockets 时遇到了一些问题。
这是我的代码:
void connectToWebSocket() {
print("trying to connect to websocket");
final Future futureChannel = establishConnection();
futureChannel.then((future) {
print("Connection established, registering interest now...");
channel = future;
webSocketConnected = true;
channel.sink.add({
"action": "saveConnection",
"UserName": "rakshak@gmail.com",
"DeviceId": "1d0032000947363339343638"
});
}).catchError((error) {
channel = null;
webSocketConnected = false;
webSocketConnectionError = error.toString();
print("Connection failed \n $webSocketConnectionError");
});
}
Future<IOWebSocketChannel> establishConnection() async {
final IOWebSocketChannel channel = IOWebSocketChannel.connect(
'wss://1j839fy6t3.execute-api.us-east-1.amazonaws.com/Dev');
return channel;
}
这段代码运行时似乎没有任何反应。我可以在控制台上看到打印消息“正在尝试连接到 WebSocket”和“已建立连接,现在正在注册兴趣...”。
WebSocket 是使用 AWS API 网关实现的,我在日志中看到 Flutter 应用程序未连接到 WebSocket。
我已经使用 wscat
命令行工具测试了 WebSocket,我知道它可以工作。
我在控制台中没有看到任何错误。
如果您想查看我的更多代码,请告诉我。
我不明白你想要什么。但是如果你想要websocket,你可以参考下面的。
添加飞镖酒吧
adhara_socket_io
添加class
class SignalServer {
static SignalServer _instatnce;
factory SignalServer() => _instatnce ?? new SignalServer._();
SignalServer._();
SocketIO socketIO;
int State = 0;
void ConnectServer() async {
this.socketIO = await SocketIOManager().createInstance("http://192.168.50.65:8081");
socketIO.onConnect((data) {
print("Signal server connected");
State = 1;
});
socketIO.onDisconnect((_) {
print("Signal Disconnected");
State = 0;
});
socketIO.connect();
}
}
实例(main.dart)
static SignalServer signalServer;
....
signalServer = new SignalServer();
signalServer.ConnectServer();
使用
在任何小部件中
void initState() {
super.initState();
setSocketEvent();
}
void setSocketEvent() async{
await MyApp.signalServer.socketIO.on("room-ready", (data) {
//enter your code
});
await MyApp.signalServer.socketIO.on("on-message", (data) {
//enter your code
});
...
}
希望对你有所帮助
原来你 channel.sink.add
接受字符串而不是 Map。
替换
channel.sink.add({
"action": "saveConnection",
"UserName": "rakshak@gmail.com",
"DeviceId": "1d0032000947363339343638"
});
有
channel.sink.add('{
"action": "saveConnection",
"UserName": "rakshak@gmail.com",
"DeviceId": "1d0032000947363339343638"
}');
它应该可以工作。
web_socket_channel 包中包含连接到 WebSocket 服务器所需的工具。该包提供了一个WebSocketChannel,允许用户既可以监听来自服务器的消息,也可以向服务器推送消息。
使用以下行创建连接到服务器的 WebSocketChannel:
var channel = IOWebSocketChannel.connect("ws://localhost:1234");
收听来自服务器的消息:
StreamBuilder(
stream: widget.channel.stream,
builder: (context, snapshot) {
return Text(snapshot.hasData ? '${snapshot.data}' : '');
},
);
向服务器发送数据:
要向服务器发送数据,向 WebSocketChannel 提供的接收器添加 () 消息,如下所示:
channel.sink.add('connected!');
关闭连接:
要关闭与 WebSocket 的连接,请使用以下命令:
channel.sink.close();
我在 flutter 应用程序中实现 WebSockets 时遇到了一些问题。
这是我的代码:
void connectToWebSocket() {
print("trying to connect to websocket");
final Future futureChannel = establishConnection();
futureChannel.then((future) {
print("Connection established, registering interest now...");
channel = future;
webSocketConnected = true;
channel.sink.add({
"action": "saveConnection",
"UserName": "rakshak@gmail.com",
"DeviceId": "1d0032000947363339343638"
});
}).catchError((error) {
channel = null;
webSocketConnected = false;
webSocketConnectionError = error.toString();
print("Connection failed \n $webSocketConnectionError");
});
}
Future<IOWebSocketChannel> establishConnection() async {
final IOWebSocketChannel channel = IOWebSocketChannel.connect(
'wss://1j839fy6t3.execute-api.us-east-1.amazonaws.com/Dev');
return channel;
}
这段代码运行时似乎没有任何反应。我可以在控制台上看到打印消息“正在尝试连接到 WebSocket”和“已建立连接,现在正在注册兴趣...”。
WebSocket 是使用 AWS API 网关实现的,我在日志中看到 Flutter 应用程序未连接到 WebSocket。
我已经使用 wscat
命令行工具测试了 WebSocket,我知道它可以工作。
我在控制台中没有看到任何错误。
如果您想查看我的更多代码,请告诉我。
我不明白你想要什么。但是如果你想要websocket,你可以参考下面的。
添加飞镖酒吧
adhara_socket_io
添加class
class SignalServer { static SignalServer _instatnce; factory SignalServer() => _instatnce ?? new SignalServer._(); SignalServer._(); SocketIO socketIO; int State = 0; void ConnectServer() async { this.socketIO = await SocketIOManager().createInstance("http://192.168.50.65:8081"); socketIO.onConnect((data) { print("Signal server connected"); State = 1; }); socketIO.onDisconnect((_) { print("Signal Disconnected"); State = 0; }); socketIO.connect(); } }
实例(main.dart)
static SignalServer signalServer; .... signalServer = new SignalServer(); signalServer.ConnectServer();
使用
在任何小部件中
void initState() {
super.initState();
setSocketEvent();
}
void setSocketEvent() async{
await MyApp.signalServer.socketIO.on("room-ready", (data) {
//enter your code
});
await MyApp.signalServer.socketIO.on("on-message", (data) {
//enter your code
});
...
}
希望对你有所帮助
原来你 channel.sink.add
接受字符串而不是 Map。
替换
channel.sink.add({
"action": "saveConnection",
"UserName": "rakshak@gmail.com",
"DeviceId": "1d0032000947363339343638"
});
有
channel.sink.add('{
"action": "saveConnection",
"UserName": "rakshak@gmail.com",
"DeviceId": "1d0032000947363339343638"
}');
它应该可以工作。
web_socket_channel 包中包含连接到 WebSocket 服务器所需的工具。该包提供了一个WebSocketChannel,允许用户既可以监听来自服务器的消息,也可以向服务器推送消息。
使用以下行创建连接到服务器的 WebSocketChannel:
var channel = IOWebSocketChannel.connect("ws://localhost:1234");
收听来自服务器的消息:
StreamBuilder(
stream: widget.channel.stream,
builder: (context, snapshot) {
return Text(snapshot.hasData ? '${snapshot.data}' : '');
},
);
向服务器发送数据:
要向服务器发送数据,向 WebSocketChannel 提供的接收器添加 () 消息,如下所示:
channel.sink.add('connected!');
关闭连接: 要关闭与 WebSocket 的连接,请使用以下命令:
channel.sink.close();