尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Socket.IO React Native 示例:移动 App 通过 socket.io-client 连接实时服务器的完整实战指南
Socket.IO React Native 示例移动 App 通过 socket.io-client 连接实时服务器的完整实战指南【免费下载链接】socket.ioBidirectional and low-latency communication for every platform项目地址: https://gitcode.com/gh_mirrors/so/socket.io本文基于 socket.io 仓库中的 React Native 示例完整讲解如何在 React Native 0.73 项目中接入 Socket.IO从启动 Metro 与移动端 App、部署 Node 端 Socket.IO 服务器到用socket.io-client建立连接、监听连接状态与传输层升级polling 到 WebSocket 的切换。读完本文你将掌握一个可直接在 Android/iOS 模拟器上运行并验证实时通信链路的最小可用工程。示例工程结构与版本依赖该示例位于 examples/ReactNativeExample 目录是一个用react-native-community/cli引导生成的标准 React Native 工程在此基础上叠加了 Socket.IO 客户端与服务器两部分代码App.tsx主界面展示连接状态与当前使用的传输层socket.js单例 Socket.IO 客户端指向局域网 IP 的服务器server/index.js独立的 Node 端 Socket.IO 服务器index.js 与 app.jsonReact Native 入口注册与应用名配置metro.config.jsMetro 打包器默认配置__tests__/App.test.tsxApp 组件的 Jest 渲染测试。从 package.json 可以看到关键版本约束这也是本示例可运行的适用前提依赖版本说明react-native0.73.6React Native 运行时react18.2.0React 版本socket.io-client^4.7.5客户端实时通信库typescript5.0.4配合react-native/typescript-config使用node18engines字段声明的 Node 版本下限服务端的 server/package.json 单独声明了socket.io: ^4.7.5并将type: module设为 ESM 模式因此服务器代码使用import语法。Step 1启动 Metro 服务器示例的 README 要求先完成 React Native 官方环境搭建至创建新应用步骤。随后在工程根目录启动 Metro——React Native 内置的 JavaScript 打包器# using npm npm start # OR using Yarn yarn startnpm start实际执行的是 package.json 中的react-native start脚本Metro 会监听文件变化并为模拟器/设备提供 JS bundle。注意此终端需要保持运行。Step 2启动 Android 或 iOS 应用让 Metro 在独立终端中运行另开一个终端从工程根目录启动目标平台的 AppAndroid# using npm npm run android # OR using Yarn yarn androidiOS# using npm npm run ios # OR using Yarn yarn ios对应的 package.json 脚本分别为react-native run-android与react-native run-ios。配置正确时App 应很快出现在 Android 模拟器或 iOS 模拟器中当然也可以在 Android Studio 或 Xcode 中直接运行。Step 3启动 Socket.IO 服务器这是示例中最关键的一步README 给出的操作是cd server npm install npm startnpm start执行node index.js服务端代码非常精简server/index.jsimport { Server } from socket.io; const io new Server(); io.on(connection, (socket) { console.log(connect: ${socket.id}, socket.request.headers); socket.on(disconnect, () { console.log(disconnect: ${socket.id}); }); }); io.listen(3000);它完成三件事new Server()创建 Socket.IO 服务器实例监听connection事件打印客户端 socket id 与请求头客户端断开时打印disconnectio.listen(3000)独立监听 3000 端口不挂载到 Express 等 HTTP 框架上。这样客户端每连入/断开一个连接终端都会出现形如connect: socket.id的日志可以作为服务端验证握手成功的依据。Step 4客户端连接——为什么必须使用局域网 IPsocket.js 是整个示例客户端的核心import { io } from socket.io-client; export const socket io(http://192.168.0.10:3000); // use the IP address of your machine这里有两个值得注意的技术点必须替换为开发机的 IP 地址注释明确要求 use the IP address of your machine。因为 Android 模拟器与 iOS 模拟器运行在独立网络栈中从模拟器访问localhost:3000指向的是模拟器自身而非宿主机所以必须使用宿主机在局域网中的可达 IP如示例中的192.168.0.10。单例导出socket以模块顶层单例形式导出整个 App 共享同一个 Socket.IO 连接与底层的 Engine.IO 引擎实例。App.tsx通过import { socket } from ./socket引入该单例并挂载事件监听App.tsxconst [isConnected, setIsConnected] useState(false); const [transport, setTransport] useState(N/A); useEffect(() { if (socket.connected) { onConnect(); } function onConnect() { setIsConnected(true); setTransport(socket.io.engine.transport.name); socket.io.engine.on(upgrade, (transport) { setTransport(transport.name); }); } function onDisconnect() { setIsConnected(false); setTransport(N/A); } socket.on(connect, onConnect); socket.on(disconnect, onDisconnect); return () { socket.off(connect, onConnect); socket.off(disconnect, onDisconnect); }; }, []); return ( View style{styles.container} TextStatus: { isConnected ? connected : disconnected }/Text TextTransport: { transport }/Text /View );界面最终只显示两行信息连接状态connected/disconnected和当前传输层名称Transport: name。这段代码是理解 Socket.IO 客户端连接模型的一个非常好的最小样本先判断再监听socket是单例useEffect执行时连接可能已建立所以先用socket.connected判断并立即调用onConnect()避免错过connect事件连接状态由connect/disconnect事件驱动connect置为已连接disconnect复位为未连接并把传输层清为N/A传输层通过socket.io.engine.transport.name读取socket.io是Manager其engine是 Engine.IO 的Socket实例transport即当前生效的底层传输监听upgrade事件感知传输层切换当 Engine.IO 从长轮询升级到 WebSocket 时会触发upgrade事件并携带新的 transport 对象示例据此实时更新界面显示的传输层名称组件卸载时解绑useEffect的清理函数用socket.off移除两个监听器防止 React 组件重挂载造成监听器泄漏。传输层升级机制的源码佐证upgrade事件并非 Socket.IO 层的事件而是来自底层的 Engine.IO 客户端。从 engine.io-client 的 Socket 实现 可以看到upgrade?: boolean选项控制客户端是否应尝试将传输层从当前类型升级到 WebSocketEngine.IO 的Socket定义了upgrade: (transport: Transport) void事件并有对应的upgradeError事件upgrades: string[]表示可升级到的传输层列表默认连接流程会先建立 polling 连接再按升级路径尝试 WebSocket见 socket.ts 中 upgrade 相关注释 与事件定义。因此在示例 UI 中你通常会看到Transport先显示pollingXHR 长轮询随后在升级到 WebSocket 后刷新为websocket——这正是App.tsx里监听upgrade事件的意义。修改 App 并热重载Step 4README 的最后一步是修改代码并观察热重载用文本编辑器打开App.tsx修改内容Android按两次R键或从开发者菜单选择ReloadWindows/Linux 为CtrlMmacOS 为CmdMiOS在模拟器中按CmdR重新加载应用。由于 Metro 在 Step 1 中一直在运行保存App.tsx后重新加载即可看到 Socket.IO 连接信息与界面变化。此外 App.test.tsx 提供了一个最简的 Jest 渲染测试renderer.create(App /)可用npm test执行验证组件能被渲染。运行前提与实操注意事项Node 版本客户端工程 package.json 声明node: 18请确保 Node 18服务器端口server/index.js 固定监听 3000 端口若被占用需自行调整并同步修改 socket.js 中的 URLIP 必须可达socket.js中的192.168.0.10只是占位示例必须替换为运行服务器的开发机局域网 IP否则模拟器无法建立连接这是移动端调试与浏览器调试最常见的差异点;两端版本对齐客户端socket.io-client ^4.7.5与服务端socket.io ^4.7.5均为 4.x 系列遵循仓库 docs/socket.io-protocol 中描述的 v5 协议世代Socket.IO 4.x 客户端/服务端协议跨大版本混用需自行验证兼容性。小结这个示例的价值在于用最少的代码串通了React Native 端 Node 端的完整实时通信链路server/index.js 展示了 Socket.IO 服务器的最小独立部署方式socket.js 展示了移动端连接单例的建立方式与局域网 IP 的使用要求App.tsx 则演示了如何读取连接状态、当前传输层以及如何通过 Engine.IO 的upgrade事件观察轮询升级到 WebSocket这一 Socket.IO 的默认传输层策略。按 README 的四个步骤Metro → 移动端 App → Socket.IO 服务器 → 修改与热重载操作即可在模拟器上得到一个可验证收发链路的工作示例。【免费下载链接】socket.ioBidirectional and low-latency communication for every platform项目地址: https://gitcode.com/gh_mirrors/so/socket.io创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

单片机毕设选题推荐:基于 NRF24L01 的主从式病房呼叫监测装置设计 STM32/51 单片机驱动的 LCD1602 病房呼叫显示系统设计(020206)

单片机毕设选题推荐:基于 NRF24L01 的主从式病房呼叫监测装置设计 STM32/51 单片机驱动的 LCD1602 病房呼叫显示系统设计(020206)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

📅 2026/10/3 23:32:40
OpenRouter接入Claude Fable 5.1:API调用与生产实践指南

OpenRouter接入Claude Fable 5.1:API调用与生产实践指南

在过去的一段时间里,OpenRouter 已经成为不少 AI 应用开发者对接大模型时优先考虑的网关平台。原因并不难理解:它把 Claude、GPT、Llama、Gemini 等多家模型统一到一个 API 接口后面,代码里只需要维护一个 Base URL 和一套请求格式。现在&…

📅 2026/9/30 22:10:55
单片机毕设选题推荐:基于 STM32 的 OLED 显示智能自适应风扇控制系统设计 基于 STM32 的多操作模式智能风扇远程监控装置设计(018506)

单片机毕设选题推荐:基于 STM32 的 OLED 显示智能自适应风扇控制系统设计 基于 STM32 的多操作模式智能风扇远程监控装置设计(018506)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

📅 2026/9/7 6:51:30
MORE NEWS

更多资讯

📰

PMD规则文件配置指南:从安装到CI集成与验证

简介:这份资源是面向Java开发者与代码质量管理人员的PMD规则配置文件集合,用于在Eclipse等开发环境中落地静态代码检查,帮助团队发现潜在缺陷、不良编码习惯与可读性问题,适合希望建立或定制代码规范的中初级开发者参考。压缩包共…

📰

企业站CMS v1.3.6升级指南:更新日志解读与回滚实操

做企业站、行业站这行的朋友,对“CMS版本升级”这四个字大概都有点复杂情绪:不升吧,怕漏掉安全补丁和新功能;升吧,又怕一个不小心把正在跑的站点搞挂。我手上长期维护着几个中小型站点,用的是同一套建站CMS…

📰

Java浮点数Infinity排查与防御:从Double.isInfinite到JSON序列化兜底

上周三下午,某项目组的一位同学在群里甩了张截图,接口返回的 JSON 里有个字段长这样:"avgLatency": Infinity。前端直接白屏,控制台一行Unexpected token I in JSON at position ...。后端日志里只留下一句isInfinitetr…

📰

Java与C#语法差异详解:面向对象编程对比指南

1. Java与C#语法差异概述Java和C#作为当今最流行的两种面向对象编程语言,都源自C/C语法体系,但在语法细节上存在诸多差异。这两种语言在类型系统、内存管理、异常处理等基础架构上高度相似,但在具体语法糖、API设计理念上却各有特色。对于需要…

📰

PMD静态代码分析环境搭建:规则文件配置与避坑指南

简介:这份资源面向使用Java进行开发、希望借助静态分析提升代码质量的中高级开发者,以及需要在Eclipse中落地编码规范的技术团队。包内提供PMD规则XML配置文件,围绕规则集、规则、类别、参数与排除等要素组织,可用于定制设计、冗余…

📰

WebAssembly逆向实战:荔枝网Wasm加密参数分析

1. 荔枝网Wasm加密参数逆向分析背景在当今Web安全领域,越来越多的网站开始采用WebAssembly(Wasm)技术来实现关键业务逻辑的加密保护。荔枝网作为国内知名的音频分享平台,其核心接口参数采用了Wasm加密方案,这给传统的JS逆向工作带来了新的挑战…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬