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
随机推荐
- TypeError: Cannot read property 'getAttribute' of undefined
今天使用echarts + vue 做 图标,运行时提示vue.runtime.esm.js?2b0e:619 [Vue warn]: Error in mounted hook: "Typ ...
- Ubuntu22.04 安装单机版kubernetes
前言 上期讲到要实现.net 6框架下的EF Core操作数据库基本增删改查,没有及时兑现.没有兑现的原因就是因为安装kubernetes.安装kubernetes的过程是灾难性的,也是十分顺利的.灾 ...
- 最全面的Mybatis面试八股文
Mybatis是什么? MyBatis框架是一个开源的数据持久层框架. 它的内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询.存储过程和高级映射,几乎消除了所有的JDBC代码和参数的手工设 ...
- JupyterLab Server 搭建与使用笔记
两三个月前,有幸拿到了云筏的一个 4 核 16G,1TB硬盘,300M带宽位于欧洲的云服务器,自带的开箱即用的 RStudio Server 也非常给力,但最近这两天在升级 R 的时候遇上了不少问题, ...
- Python-Loguru:让记录日志更装13
" 今天勇哥来介绍一款让日志记录在 Python 中变得更加轻松愉快的库--Loguru.它提供了强大的功能和简洁的接口,使我们能够以更加灵活和直观的方式记录和管理日志信息,据说比loggi ...
- c++函数重载 c/c++混合编程
C++语言支持函数重载实现原理: 名字改编(name mangling)具体步骤: 当函数名称相同时,会根据函数参数的类型.个数.顺序进行改编 对源码直接用C++编译器进行编译时,会按C++方式进行调 ...
- Handler机制实现原理总结
Handler一般用于线程间通信,如常用的子线程使用handler让主线程更新UI.那么这是怎么实现的呢? 我们先把这个大问题分解成多个小问题: post();postDelayed();sendMe ...
- 【HMS Core】【In-App Purchases】应用内支付热门FAQ合集
近期收到很多开发者关于应用内支付服务的相关问题,主要集中在以下几个方面,今天和大家分享一下,希望给大家的开发集成带来帮助. [问题描述1] 近期,很多开发者收到关于"全面限制HTTP类型回 ...
- 解决QRCODE生成的二维码微信长按不识别问题
问题描述 QRcode 生成二维码,展示到页面,微信打开,长按二维码没反应.而直接放二维码图片上去可以识别. 问题原因 手机兼容问题qrcode在页面生成二维码时,会生成一个canvas标签和一个im ...
- 学习websocket,原来这么简单
简单介绍 websocket WebSocket是一种在TCP连接上进行全双工通信的协议. WebSocket通信协议于2011年被IETF定为标准. 然后WebSocket API也被W3C定为标准 ...