尝试将 flutter 应用连接到 Web 套接字时出错

Emi*_*gün 0 node.js express socket.io flutter

我正在尝试将我的 flutter 应用程序与 websocket 连接,我猜服务器端工作正常,但在客户端出现以下错误,知道为什么吗?并且还阅读类似的问题,通常他们说“这是关于设备连接的”,但我可以在我的模拟器中使用restful api,所以我认为这不是问题。

\n

错误

\n
 WebSocketException: Connection to 'http://localhost:8080/socket.io/?EIO=3&transport=websocket#' was not upgraded to websocket\n
Run Code Online (Sandbox Code Playgroud)\n

客户端

\n
 import 'dart:async';\n    import 'package:flutter/material.dart';\n    import 'package:live_chat_mongo/function.dart';\n    import 'package:live_chat_mongo/models/Message.dart';\n    import 'package:socket_io_client/socket_io_client.dart' as IO;\n    \n    import 'package:socket_io_client/socket_io_client.dart';\n    \n    // STEP1:  Stream setup\n    class StreamSocket {\n      final _socketResponse = StreamController<String>();\n    \n      void Function(String) get addResponse => _socketResponse.sink.add;\n    \n      Stream<String> get getResponse => _socketResponse.stream;\n    \n      void dispose() {\n        _socketResponse.close();\n      }\n    }\n    \n    StreamSocket streamSocket = StreamSocket();\n    \n    //STEP2: Add this function in main function in main.dart file and add incoming data to the stream\n    void connectAndListen() {\n      IO.Socket socket = IO.io('http://localhost:8080/v1',\n          OptionBuilder().setTransports(['websocket']).build());\n      socket.onConnectError((data) => print(data));\n      socket.onConnect((_) {\n        print('connect');\n      });\n    \n      //When an event recieved from server, data is added to the stream\n      socket.on('event', (data) => streamSocket.addResponse);\n      socket.onDisconnect((_) => print('disconnect'));\n    }\n    \n    //Step3: Build widgets with streambuilder\n    \n    class BuildWithSocketStream extends StatelessWidget {\n      @override\n      Widget build(BuildContext context) {\n        return Container(\n          child: StreamBuilder(\n            stream: streamSocket.getResponse,\n            builder: (BuildContext context, AsyncSnapshot<String> snapshot) {\n              return Container(\n                child: Text('ds'),\n              );\n            },\n          ),\n        );\n      }\n    }\n    \n    void main() {\n      connectAndListen();\n      runApp(MaterialApp(home: BuildWithSocketStream()));\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

服务器端

\n
require("dotenv").config({ path: "variables.env" });\n\nrequire("./app/services/mongo");\n// require('./app/services/redis');\n\nrequire("./app/models/User.js");\nrequire("./app/models/Event.js");\nrequire("./app/models/Committee.js");\nrequire("./app/models/Comment.js");\nrequire("./app/models/EventSession.js");\nrequire("./app/models/Subscription.js");\nrequire("./app/models/Form.js");\nrequire("./app/models/Application.js");\nrequire("./app/models/Announcement.js");\nrequire("./app/models/MailToken.js");\nrequire("./app/models/MailError.js");\nrequire("./app/models/BlogPost.js");\nrequire("./app/models/BlogComment.js");\nrequire("./app/models/BlogCategory.js");\n\nconst app = require("./app");\nvar http = require("http").Server(app);\nvar io = require("socket.io")(http);\nio.on("connection", (s) => {\n  console.log("socket.io connection");\n\n});\napp.set("port", process.env.PORT || 7070);\nconst server = app.listen(app.get("port"), () => {\n  console.log(`Express running \xe2\x86\x92 localhost:${server.address().port}`);\n});\n
Run Code Online (Sandbox Code Playgroud)\n

小智 5

我面临这个问题,我通过更改我的 socket_io_client 版本解决了这个问题

这是我更改的版本,请查看