Socket.io入门
Socket.io入门
根据官方文档socket.io使用必须客户端根服务端一致,socket.io不兼容webSocket或者其他模块,因为socket.io在连接时做了自定义处理,
所以不同的长连接npm模块并不互通
首先安装npm包:
客户端(vue):
npm i socket.io-client@4.7.2
服务端(express):
npm i socket.io@4.7.2
因为socket.io不同版本之间使用方法有差异,本文写作时采用的是4.7.2版本
简单使用express.js+socket.io搭建一个服务器用来测试:
/**
* @file server.js
* */
import express from "express";
import { createServer } from "http";
import { Server } from "socket.io";
const app = express();
const httpServer = createServer(app);
const io = new Server(httpServer, {
cors: {
/* 需要指定,要不然本地调试过程中会产生跨域*/
origin: "*",
}
});
/* 这里就是当客户端socket连接到服务端socket的生命周期 */
io.on('connection',function(socket) {
/* io.emit(事件名,参数) */
io.emit('message','恭喜连接成功');
})
httpServer.listen(3000, () => console.log("run"));
/**
* @file client.js
* */
import {io} from 'socket.io-client'
/* 指定连接的地址 */
const socket = io('ws://localhost:3000');
socket.connect();
socket.on('message',message=>{
console.log('我是客户端,接收到了数据',message);
})
以上就是一个简单的socket.io通信的例子,下面记录一些常用用法,首先要了解socket.io基本概念
Socket.IO 中的每一个socket都由一个随机的、不可猜测的、唯一的标识符Socket#id。为了您的方便,每个socket都会自动加入一个由其自己的 id 标识的房间
房间是一个虚拟的仅存在于服务端的虚拟的概念,类似于分组的意思。
- 加入房间
socket.join(roomName); - 离开房间
socket.leave(roomName); - 查询当前连接是否已加入该房间
const room = io.sockets.adapter.rooms.get(roomName);
if (room && room.has(socket.id)) {
/* 已加入 */
}
- 发送消息给单个连接的客户端
io.in(socket.id).emit(事件名,参数) - 在房间内发送广播
io.in(roomName).emit(事件名,参数) - 获取房间内的连接数(promise)
await (io.in(roomName).fetchSockets()).length
写于2023年09月04日
Socket.io入门的更多相关文章
- socket.io入门整理教程
socket.io入门整理 发布于 5 年前 作者 dtrex 124983 次浏览 最后一次编辑是 1 年前 我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写 ...
- Socket.io 入门 - Renyi的博客
Socket.io Vue 中使用 NPM 安装 npm install vue-socket.io --save npm install --save socket.io-client 引用 详情 ...
- Node.js、Express、Socket.io 入门
前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...
- socket.io 入门教程
转载自:http://deadhorse.me/nodejs/2011/12/29/socket.io_induction.html socket.io socket.io是一个以实现跨浏览器.跨平台 ...
- 转载:socket.io 入门
原文链接:http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264 我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单 ...
- socket.io 入门篇(三)
本文原文地址:https://www.limitcode.com/detail/5926e3a056fba70278bf2044.html 前言 上篇我们介绍了 socket.io 中room的概念和 ...
- socket.io 入门篇(二)
本文原文地址:https://www.limitcode.com/detail/5922f1ccb1d4fe074099d9cd.html 前言 上篇我们介绍了 socket.io 基本使用方法,本篇 ...
- socket.io 入门篇(一)
本文原文地址:https://www.limitcode.com/detail/591b114bb1d4fe074099d9c9.html 前言 本篇介绍使用node.js模块组件socket.io实 ...
- socket.io入门整理
我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单的聊天程序. 最最开始 先安装socket.io: 1 npm install socket.io 利用Nod ...
- socket.io入门示例参考
参考示例地址:http://www.linchaoqun.com/html/cms/content.jsp?menu=nodejs&id=1480081169735
随机推荐
- Python基础 - 注释
单行注释 Python中使用#表示单行注释.一般在#后面添加一个空格,再添加注释内容 1 # 这是单行注释 多行注释 Python中使用三个单引号或三个双引号表示多行注释. 1 ''' 2 这是使 ...
- C# 客户端程序 Visual Studio 远程调试方法
传统桌面客户端的远程调试相比UWP,ASP等项目来说,配置比较麻烦,因为它是非部署的应用程序,原理是复制编译的文件到远程计算机,通过网络来连接和VS的通信,本文主要讲述WPF,WinForm应用程序的 ...
- 华为防火墙NAT技术
---我是陈小瓜,一个普通的路人,和大家一起交流学习,完善自己. 源NAT NAT-no-pat 安全策略写法: 源NAT,写安全策略,写转换前的私网IP,因为先匹配安全策略.再匹配NAT策略 NAT ...
- 原生AJAX的学习
基础知识 知识点梳理见图: 自己动手实践案例 案例1: 访问本地文件 <!DOCTYPE html> <html> <body> <div id=" ...
- ChatGPT教我用200行代码写一个简版Vue框架 - OpenTiny
AI 是未来最好的老师 最近,我正在准备一份关于 Vue 基础的学习材料.期间我突发奇想:能否利用现在热门的 ChatGPT 帮我创建学习内容?其实 Vue 本身不难学,特别是基础用法,但是,如果你想 ...
- 实时光线追踪(3)Ray Casting
目录 硬件光追(Hardware Ray Tracing) 加速结构(Acceleration Structure,AS) AS 策略 Ray Tracing Pipeline Ray Generat ...
- Spring 的依赖注入(DI)
前言 欢迎来到本篇文章,书接上回,本篇说说 Spring 中的依赖注入,包括注入的方式,写法,该选择哪个注入方式以及可能出现的循环依赖问题等内容. 如果正在阅读的朋友还不清楚什么是「依赖」,建议先看看 ...
- php处理emoji表情 存数据库
PHP 处理emoji表情 存数据库 直接过滤掉 1 function filter_emoji($str) { 2 $regex = '/(\\\u[ed][0-9a-f]{3})/i'; 3 $s ...
- 强化学习实践:Policy Gradient-Cart pole游戏展示
摘要:智能体 agent 在环境 environment 中学习,根据环境的状态 state(或观测到的 observation),执行动作 action,并根据环境的反馈 reward(奖励)来指导 ...
- MODBUS-TCP转Ethernet IP 网关连接空压机配置案例
本案例是工业现场应用捷米特JM-EIP-TCP的Ethernet/IP转Modbus-TCP网关连接欧姆龙PLC与空压机的配置案例.使用设备:欧姆龙PLC,捷米特JM-EIP-TCP网关, ETHER ...