websocket的应用,socket-io+node express+vue3,简单实现前后端消息提示功能

创建项目

因为要实现前后端通信,要创建一个文件放服务器和客户端

这个操作很简单,按照官网教程创建项目即可,比如我创建了这样一个文件夹

cn.vuejs.org/guide/quick...

客户端框架是vue,服务端是express 根据官网的教程创建client和server

cn.vuejs.org/guide/quick...

www.expressjs.com.cn/starter/gen...

创建完成之后,用vscode打开,结构大概是这样的

服务端安装一下socket.io

npm install --save socket.io

客户端也装一下

npm i socket.io-client -s

我们都知道websocket,浏览器和服务器只需进行一次握手,就可以创建持久的连接,实现数据双向传输。而socket.io又是什么呢?简而言之,它是一个库,当前环境不支持websocket时,会使用轮询的方法实现数据的双向传输。

服务端代码

在这里主要用到的socket.io的方法是socket.emit和socket.on, 打开服务端app.js这个文件

可以参考教程在app.js这个文件下写下自己的代码。 教程地址:socket.io/zh-CN/docs/...

但是官网的教程直接使用是有问题的,会有跨域问题,所以我对代码进行了一些修改。 cors:true可以解决跨域问题。

js 复制代码
const socketIo = require('socket.io')
// 端口号与跨域
const io = new socketIo.Server(1234, { cors: true })
io.on('connection', (socket) => {
    console.log('client connected');

    //监听客户端
    socket.on('message', (data) => {
        console.log('received message', data);
        // socket.emit('back', data)
        socket.emit('back', data)
    })

    socket.on('disconnect', () => {
        console.log('client disconnected');
    })
})

客户端代码

客户端新建一个.vue文件,我的页面初始绘制出来是这样的。 我想实现这样的功能,当我点击按钮时,传递一个时间戳传给服务端,服务端再将数据传递回来,通过ant-design的通知提醒框进行提示。

js 复制代码
<template>
  <a-button @click="sendMessage">
    消息提示
  </a-button>
</template>
<script setup>
import { ref } from 'vue'
import { io } from 'socket.io-client'
import { notification } from 'ant-design-vue';
const store = useCounterStore()
const socket = io('ws://localhost:1234');
const data = ref('')
const sendMessage = () => {
  socket.emit('message', Date.now())
}

socket.on('back', (res) => {
  console.log(res)
  notification.open({
    message: '消息来了',
    description: res,
    onClick: () => {
      console.log('Notification Clicked!');
    },
  });
});

</script>

这里可以注意到io('ws://localhost:1234'),这段代码中有个1234,这是和服务器里的1234对应的。 这样简单实现了需求,当点击按钮时弹出了消息提示。

相关推荐
前端繁华如梦4 分钟前
# 从 73000 行压缩代码到 TypeScript 模块化:我把一个 Three.js FPS 游戏 1:1 复刻了一遍
前端
Penge6668 分钟前
React Context 详解:从 Props 传递到跨组件状态共享
前端
Penge66617 分钟前
React 事件处理:bind(this) 原理与实际开发常用写法
前端
ZhengEnCi28 分钟前
小白用 AI 做官网完全指南:不用框架的六格清单,双击就能打开
前端·html·ai编程
zhanlang021742 分钟前
HTML 零基础入门到企业实战【第五章 5.2】图片路径精讲:绝对路径、相对路径、网络路径(新手必踩坑点)
前端·html
夕水1 小时前
我用trae重构了ew-color-picker,一个插件化架构的现代颜色选择器
前端·javascript·开源
Penge6661 小时前
React JSX 核心语法:从入门到业务开发实战
前端
zhanlang02171 小时前
HTML 零基础入门到企业实战全套教程【第五章 5.5 综合案例:图文影音展示页面开发】
前端·html
zhanlang02172 小时前
HTML 零基础入门到企业实战全套教程【连载 5.3】audio、video 音频视频标签|兼容格式、自动播放踩坑、企业规范
前端·html
qq_406981033 小时前
c++ lamda(三)Lambda表达式
java·前端·c++