Flutter Socket.IO通信插件socket_io_common的使用

Flutter Socket.IO通信插件 socket_io_common 的使用

socket_io_common 是一个用于Dart 2的Socket.io通用解析库。它支持不同版本的Socket.io服务器,并且提供了与之对应的版本兼容性信息。

版本信息

socket_io_common Socket.io Server
v0.9.* ~ v1.* v2.*
v2.* v3.* ~ v4.6.*
v3.* v4.7.* ~ v4.*

示例Demo

下面是一个简单的Flutter应用示例,展示了如何使用socket_io_client(基于socket_io_common)与Socket.io服务器进行通信。

添加依赖

首先,在你的pubspec.yaml文件中添加socket_io_client依赖:

dependencies:
  flutter:
    sdk: flutter
  socket_io_client: ^2.0.0 # 根据需要选择合适的版本

然后运行flutter pub get来安装依赖。

客户端代码示例

以下是一个完整的客户端示例,演示了如何连接到Socket.io服务器、发送和接收消息。

import 'package:flutter/material.dart';
import 'package:socket_io_client/socket_io_client.dart' as IO;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Socket.IO Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late IO.Socket socket;
  String message = '';

  @override
  void initState() {
    super.initState();
    // 初始化Socket.io客户端并连接到服务器
    socket = IO.io('http://localhost:3000', <String, dynamic>{
      'transports': ['websocket'],
      'autoConnect': false,
    });

    socket.connect();

    // 监听来自服务器的消息
    socket.on('connect', (_) {
      print('连接成功');
      socket.emit('msg', '测试消息');
    });

    socket.on('event', (data) => print(data));

    socket.on('disconnect', (_) => print('断开连接'));
  }

  void sendMessage() {
    if (message.isNotEmpty) {
      socket.emit('msg', message);
      setState(() {
        message = '';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Socket.IO Demo"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              onChanged: (value) {
                setState(() {
                  message = value;
                });
              },
              decoration: InputDecoration(hintText: "输入消息"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: sendMessage,
              child: Text("发送消息"),
            ),
          ],
        ),
      ),
    );
  }
}

服务器端代码示例(Node.js)

为了测试这个客户端,你需要一个简单的Socket.io服务器。以下是使用Node.js编写的服务器示例:

const io = require('socket.io')(3000);

io.on('connection', (socket) => {
  console.log('新用户连接');

  socket.on('msg', (data) => {
    console.log('收到消息:', data);
    socket.emit('event', '服务器已收到消息: ' + data);
  });

  socket.on('disconnect', () => {
    console.log('用户断开连接');
  });
});

更多关于Flutter Socket.IO通信插件socket_io_common的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Socket.IO通信插件socket_io_common的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用socket_io_common插件进行Socket.IO通信的示例代码。请注意,socket_io_common本身是一个抽象层,通常你会结合socket_io_clientsocket_io_server等具体实现来使用。这里我们主要展示如何在Flutter客户端使用socket_io_client

首先,确保你已经在pubspec.yaml文件中添加了必要的依赖:

dependencies:
  flutter:
    sdk: flutter
  socket_io_client: ^2.0.0-beta.4 # 请检查最新版本号

然后,运行flutter pub get来安装依赖。

接下来,你可以按照以下步骤在Flutter应用中实现Socket.IO通信:

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:socket_io_client/socket_io_client.dart' as IO;
  1. 创建一个Socket.IO客户端
class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  IO.Socket? socket;

  @override
  void initState() {
    super.initState();
    // 连接到Socket.IO服务器
    connectToSocket();
  }

  void connectToSocket() {
    // 替换为你的Socket.IO服务器URL
    String serverUrl = 'http://localhost:3000';
    socket = IO.io(serverUrl, <String, dynamic>{
      'transports': ['websocket'],
      // 你可以在这里添加更多的配置选项
    });

    // 监听连接事件
    socket!.onConnect((_) {
      print('Connected to server');
      // 连接成功后可以发送消息
      socket!.emit('message', 'Hello from Flutter!');
    });

    // 监听消息事件
    socket!.on('message', (data) {
      print('Received message: $data');
    });

    // 监听连接断开事件
    socket!.onDisconnect((_) {
      print('Disconnected from server');
    });

    // 监听错误事件
    socket!.onError((error) {
      print('Socket error: $error');
    });
  }

  @override
  void dispose() {
    // 断开连接并释放资源
    socket?.disconnect();
    socket = null;
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Socket.IO Example'),
        ),
        body: Center(
          child: Text('Check console for Socket.IO logs'),
        ),
      ),
    );
  }
}

void main() {
  runApp(MyApp());
}
  1. 运行你的Flutter应用

确保你的Socket.IO服务器正在运行,并且URL与代码中指定的相匹配。然后运行你的Flutter应用,你应该能在控制台中看到连接和消息日志。

这个示例展示了如何连接到Socket.IO服务器、监听事件以及发送和接收消息。你可以根据需要在应用的不同部分添加更多的Socket.IO交互逻辑。

回到顶部