Flutter Socket.io框架的使用

flutter——socket填坑 在flutter中使用socket可能会遇到一些问题 阅读详情

前言

Web socket 是双向的、全双工的通信技术,其中数据的传输是实时和双向的

而Socket.io是一个用于实现Web socket的流行库。

一 客户端使用

参考:https://news.sangniao.com/p/1845827276

1 安装

 pub add socket_io_client

2 代码

import 'package:flutter/material.dart';

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

class HomePage extends StatefulWidget {
  const HomePage({super.key});

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  IO.Socket? socket;
  String receivedMessage = "待展示消息";

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    initSocket();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("LeonardoHome"),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.center,
        children: [
          SizedBox(
            height: 100,
          ),
          Text(
            receivedMessage,
            textAlign: TextAlign.center,
            style: TextStyle(fontSize: 25),
          ),
          ElevatedButton(
              onPressed: () {
                sendMessage();
              },
              child: Text("发送消息")),
        ],
      ),
    );
  }

  initSocket() {
    socket = IO.io('http://localhost:3001', <String, dynamic>{
      'autoConnect': true,
      'transports': ['websocket'],
    });
    socket!.connect();
    socket!.onConnect((_) {
      print('Connection established');
    });
    socket!.onDisconnect((_) => print('Connection Disconnection'));
    socket!.onConnectError((err) => print(err));
    socket!.onError((err) => print(err));
    socket!.on('message', (newMessage) {
      print(newMessage);

      setState(() {
        receivedMessage = newMessage["message"];
      });
    });
  }

  // 发送消息的触发
  sendMessage() {
    String message = "test";
    if (message.isEmpty) return;
    Map messageMap = {
      'message': message,
      'time': DateTime.now().millisecondsSinceEpoch,
    };
    socket!.emit('sendNewMessage', messageMap);
  }

  @override
  void dispose() {
    socket!.disconnect();
    socket!.dispose();
    super.dispose();
  }

  
}

二  NodeJS

1 安装

npm install express

npm install socket.io

2 服务端

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
    res.send('<h1>Welcome Realtime Server</h1>');
});

//在线用户
var onlineUsers = {};
//当前在线人数
var onlineCount = 0;

io.on('connection', function(socket){
    console.log('a user connected');

    //监听新用户加入
    socket.on('login', function(obj){
        //将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到
        socket.name = obj.userid;

        //检查在线列表,如果不在里面就加入
        if(!onlineUsers.hasOwnProperty(obj.userid)) {
            onlineUsers[obj.userid] = obj.username;
            //在线人数+1
            onlineCount++;
        }

        //向所有客户端广播用户加入
        io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
        console.log(obj.username+'加入了聊天室');
    });

    //监听用户退出
    socket.on('disconnect', function(){
        //将退出的用户从在线列表中删除
        if(onlineUsers.hasOwnProperty(socket.name)) {
            //退出用户的信息
            var obj = {userid:socket.name, username:onlineUsers[socket.name]};

            //删除
            delete onlineUsers[socket.name];
            //在线人数-1
            onlineCount--;
            //向所有客户端广播用户退出
            io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
            console.log(obj.username+'退出了聊天室');
        }
    });

    //监听用户发布聊天内容
    socket.on('sendNewMessage', function(obj){
        //向所有客户端广播发布的消息
        io.emit('message', obj);
        console.log('说:'+obj.content);
    });

});
// 监听3000 端口

http.listen(3001, function(){
    console.log('listening on *:3001');
});

Flutter 中使用 Socket.io 实现即时通信 1. 安装插件 dependencies: socket_io_client: ^0.9.12 在pubspec.yaml中配置保存后,在VS Code环境中会自动下载依赖包。 如果无法正常下载,执行flutter pub get。 2. 引入插件 在需要用到的该插件的文件中引入插件包。 import 'package:socket_io_client/socket_io_client.dart'; 3. 使用插件 import 'package:flutter/m.... 阅读详情

相关推荐

Flutter与Socket.IO的实时通信服务器搭建

Socket通信是一种网络通信的基础协议,它允许应用程序之间通过网络进行数据交换。Socket可以看作是在两个通信系统之间建立的一个端点,这个端点提供了一种打开、关闭、读取和写入数据的方法。通过Socket,数据可以在客户端和服务器之间流动。Flutter作为Google推出的UI工具包,旨在帮助开发者快速构建高性能、跨平台的移动应用。它提供了一套富于表现力的UI组件,以及用Dart语言编写的编程模型,让开发者能够在不同的设备和操作系统上创建美观、流畅的用户界面。

weixin_29997223的博客 731

Flutter开发进阶之使用Socket实现主机服务(二)

在Flutter开发实践中,有一些业务是需要主从机合作搭配的服务,其中一些重要的数据和功能是交由主机进行存储和管理,从机再通过UDP和TCP与主机通讯去获得权限,一般在同一个局域网内的多端实现。

Kevin写代码 1631

基于Socket.IO与Flutter的实时聊天应用开发实战

实时通信技术是现代互联网应用的核心组成部分,广泛应用于在线聊天、远程协作、实时数据推送等场景。随着Web技术的发展,实时通信经历了从HTTP短轮询、长轮询到WebSocket的演进,逐步实现了低延迟、高并发的双向通信能力。当前主流的实时通信协议包括:协议类型特点HTTP短轮询请求-响应模式,延迟高,服务器压力大HTTP长轮询保持连接直到有数据返回,降低延迟,但仍非真正实时WebSocket全双工通信,低延迟,适合高频率交互场景MQTT。

weixin_29476595的博客 1226

flutter笔记-webrtc使用1:依赖本地包socket.io-client

通过本文你将学会如何添加本地的dart包到自己的项目,将了解如何使用socketio;

HOSTEN的博客 1782

flutter-socket.io-服务器

flutter-socket.io-服务器

基于STM32F407ZGT6与INMP441的I2S音频采集系统:从配置到实时波形显示

本文详细介绍了基于STM32F407ZGT6与INMP441麦克风模块的I2S音频采集系统设计与实现。从硬件选型、CubeMX配置到音频数据处理和上位机波形显示,全面解析了系统架构、DMA传输优化及常见问题解决方案,帮助开发者快速构建高精度音频采集系统。

weixin_33743661的博客 403

Flutter鸿蒙应用开发:实时聊天功能集成实战

Flutter鸿蒙实时聊天功能开发摘要 本文详细介绍了基于Flutter的OpenHarmony跨平台应用集成实时聊天功能的完整流程。针对鸿蒙平台兼容性问题,作者采用Dart Stream实现了一套轻量级实时通信框架,包含: 标准化数据模型设计,支持多种消息类型 基于Stream的单例服务封装,实现消息收发、会话管理核心功能 完整的UI组件开发(会话列表+聊天详情页) 适配鸿蒙特性的交互优化(键盘适配、深色模式等) 预留WebSocket等真实通信接口 所有功能已在OpenHarmony设备验证通过,代码可

a2736484的博客 676

CAN总线错误帧全解析:从数据包到硬件层的故障树分析

本文深入解析CAN总线错误帧的故障树分析方法,从数据包到硬件层全面剖析错误机制。通过物理层信号测试、数据链路层错误解码和应用层协议排查,提供系统化的诊断框架。结合CANoe配置和示波器波形分析,帮助工程师快速定位总线故障,提升系统可靠性。

weixin_26742753的博客 488

利用这个标题帮我生成一篇原创高质量文章且不含php微信高效字眼

Flutter和React Native等跨平台框架为开发者提供了统一代码库构建多平台应用的能力。这些框架内置丰富的UI组件库,能够快速构建美观的通讯界面。WebSocket协议确保消息低延迟传输,而Redis等内存数据库能高效处理在线状态和消息队列。TLS/SSL传输层加密是基础要求,端到端加密可选用Signal协议等开源方案。通过合理的技术选型和架构设计,开发者可以在各类移动应用中构建稳定可靠的即时通讯模块,满足用户随时随地沟通的需求。开发者需要综合考虑多种技术方案,确保通讯功能的稳定性和用户体验。

2501_93928455的博客 202

【代码审计】RuoYi定时任务漏洞:从SQL注入到RCE的攻防演变

本文深入剖析了RuoYi框架定时任务模块从早期版本无校验到引入黑白名单机制,再到被组合利用实现RCE的完整漏洞演变过程。文章详细分析了SQL注入与定时任务功能结合导致的远程代码执行漏洞,并总结了代码审计与安全开发的核心要点,为开发者提供了重要的安全参考。

yellow的专栏 698

socket创建失败_flutter使用socket.io构建socket应用

http://socket.io是一个使用websocket进行socket链接的协议包,定义了聊天相关的协议和使用websocket的规范,基于该协议可以很好的构建一个聊天系统,而不需要自己构建聊天室协议,如房间,消息发送指定人等flutter中可以使用socket_io_client作为http://socket.io的客户端接入方式,socket_io_client是参考http://soc...

weixin_39558317的博客 463

Tessent MBIST SDC

主要是两个PROC,tessent_constrain_${design_name}_mentor_ijtag_non_modal和tessent_constrain_${design_name}_mentor_memory_bist_modal。其中,Memory/MBIST controller/MEM Interface可以从func_clk_1来(用func_clk_1和func_clk_2的高频时钟),如图中红色线。其中,SIB和BAP用ijtag_tck的clock,如图绿色线。

po_poo的博客 1987

flutter 使用socket io 和 EventBus 开发及时通讯

1、 网上找一圈,关于flutter及时通讯的文章太少了。实际项目需要用socket io 来实现客户端的消息收发,服务端已经写好了。 一开始的思路是使用 socket io + 数据库,但数据库用起来是个麻烦事,其实socket io 目前现有的框架集成到项目中总是有各种各样的bug和兼容问题。 所以在折腾很久之后选择了一个降级的socket io 库。目前没有发现什么问题,结合eventbus...

wapchief的博客 4227

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

RH850从0搭建Autosar开发环境【3X】- Davinci Configurator之Port模块配置详解(MCAL配置)

weixin_42412049的博客 2276

Android AMS——AMS初始化(二)

Android AMS 也是一个系统服务,属于系统服务中的引导服务,在 startBootstrapServices() 方法中启动。这里我们就来看一下 ActivityManagerService 的启动流程。

小旭的专栏 774

Flutter WASM平台下socket.io-client-dart使用指南与问题解决

socket.io-client-dart是Socket.IO客户端的Dart语言实现,专为Web、Flutter和Dart VM打造。在Flutter WASM平台开发中,它能帮助开发者轻松实现实时双向通信功能。本文将详细介绍如何在Flutter WASM环境中正确配置和使用socket.io-client-dart,并解决常见的"无可用传输方式"问题。 ## 快速开始:Flutter WAS

gitblog_00390的博客 923

从 VL02N 拣配到 ABAP 自动化,读懂 SD_DELIVERY_UPDATE_PICKING 的位置和风险

文章摘要:SAP SD模块中,SD_DELIVERY_UPDATE_PICKING函数模块用于处理出库交货单的拣配确认,更新交货项目的拣配数量。该函数适用于未启用WM/EWM的传统SD流程,能确保拣配状态与标准交货处理逻辑同步,比直接修改数据库更安全。但在S/4HANA Cloud等新环境中,应优先使用API_OUTBOUND_DELIVERY_SRV等公开发布接口。使用该函数时需注意参数完整性和按交货单整体处理的原则,避免逐项提交导致的数据不一致问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

从0到1构建实时聊天应用:基于socket.io-client-dart与Flutter的完整指南

在移动应用开发中,实时通信功能已成为许多应用的核心需求。**socket.io-client-dart**作为Socket.IO的Dart语言实现,为Flutter开发者提供了构建高效实时应用的强大工具。本文将带你一步步实现一个功能完备的实时聊天应用,从环境搭建到核心功能开发,让你快速掌握实时通信的精髓。 ## 📋 准备工作:环境搭建与依赖配置 ### 安装Flutter开发环境 确保你的开

gitblog_00344的博客 1051

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于Flutter+Nest.js+Socket.io实现及时通讯

Socket.IO是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript和服务器端的Node.js。 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。 Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。 市面上关于flutter即时通信的文章并不是很全,经过一系列的踩坑之后

weixin_44042480的博客 2294

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

socket.io-client-dart多平台适配:Flutter、Dart VM与Web全指南

socket.io-client-dart是Dart语言实现的Socket.IO客户端库,支持Flutter、Dart VM和Web多平台开发,让开发者能够轻松构建实时通信应用。本文将详细介绍如何在不同平台上使用socket.io-client-dart,帮助你快速实现跨平台的实时交互功能。 ## 多平台支持概述 🚀 socket.io-client-dart通过统一的API设计,实现了对三

gitblog_00172的博客 977

Flutter Socket 连接方案分析与适用场景

【Flutter Socket连接方案对比与实现】 本文对比了五种Flutter网络连接方案: 1️⃣ 原生Socket:适合IoT/自定义协议,提供高性能但需手动处理细节 2️⃣ WebSocket:推荐用于实时应用,支持双向通信且简单易用 3️⃣ Socket.IO:适合复杂实时应用,自带重连和房间管理功能 4️⃣ gRPC:适用于微服务通信,提供强类型接口 5️⃣ MQTT:专为IoT设计,支持低带宽环境 重点分析了前三种方案的实现代码,包括: 原生Socket的TCP/UDP连接管理 WebSock

chenzimin_blog 1411

flutter socket io 连不上,原来连了一个假的websocket的

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34013044的博客 2923

解决Flutter WebSocket连接难题:socket.io-client-dart实战技巧

在Flutter应用开发中,实时通信功能的实现往往依赖于WebSocket技术,但连接稳定性、跨平台兼容性和错误处理等问题常常困扰开发者。socket.io-client-dart作为Socket.IO的Dart语言实现,为Flutter应用提供了高效可靠的实时通信解决方案,轻松应对各种连接挑战。 ## 为什么选择socket.io-client-dart? socket.io-client-

gitblog_00818的博客 445

Flutter开发进阶之使用Socket实现主机服务(一)

在Flutter开发实践中,有一些业务是需要主从机合作搭配的服务,其中一些重要的数据和功能是交由主机进行存储和管理,从机再通过UDP和TCP与主机通讯去获得权限,一般在同一个局域网内的多端实现。

Kevin写代码 1916

Flutter 三方库 socket_io 的鸿蒙化适配指南 - 实现高性能、双向实时通信的鸿蒙跨平台应用开发

socket_io(Dart 端口) 实现了与 Node.js 服务端的全双工通信协议。在鸿蒙系统上,我们不仅要实现基础的连接和消息分发,更要针对鸿蒙系统的后台保活机制和网络切换敏感性进行深度适配,确保在复杂的移动网络下,鸿蒙应用依然能秒级响应服务器的推送。Socket.IO 首先尝试建立简单的 HTTP 长轮询,然后平滑升级到 WebSocket。graph LRA["鸿蒙客户端 (Client)"] -- "HTTP Handshake" --> B["Socket.IO Server"]

好代码自己会说话,烂代码才需要注释来圆谎 2454
上一篇: iOS 手机拍照界面 显示英文的解决方法
下一篇: Flutter Stream 简单的使用
Leonardo_Fibonacci
博客等级 码龄10年 110粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值