使用 vue-3-socket.io 插件以及node.js实现实时聊天(1)

这篇具有很好参考价值的文章主要介绍了使用 vue-3-socket.io 插件以及node.js实现实时聊天(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 这篇文章使用选项式API的写法,以实现群聊和私聊为主

客户端自然是对应使用vue3框架,服务端使用node.js配合express、http、socket.io、file等库来实现,具体如下:

一、完成客户端部分的配置代码

1、下载所需的依赖

npm install vue-3-socket.io socket.io-client

2、做socket客户端配置

// 引入相关依赖
import VueSocketIO from "vue-3-socket.io";
import SocketIO from "socket.io-client";

// 创建一个 Socket 连接
const socketio = new VueSocketIO({
  debug: false, // 布尔值,控制是否打印调试信息
  // SocketIO库的客户端连接对象,指定连接服务端的地址和传输方式
  connection: SocketIO("http://localhost:3000", {
    transports: ["websocket"],
  }),
  // 额外添加的请求头信息
  extraHeaders: { "Access-Control-Allow-Origin": "*" },
  // SocketIO库的配置项对象,用于控制自动连接
  options: {
    autoConnect: false,
  },
});

注:"http://localhost:3000",该地址端口是对应后面配置服务端时所开放的端口。

将 socketio 引入app

const app = createApp(App);
app.use(socketio)

二、完成服务端的配置代码

1、创建一个 node.js 项目

会的直接跳过到下一步

具体如下:

① 先新建一个项目文件夹

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

注:尽量不要放在前端的项目文件夹中

② 使用命令行创建项目
npm init -y

此时生成一个json文件,如下

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

{
  "name": "chat",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}
③ 在同级下建立一个index.js文件

注:这是对应上述代码中"main"字段的值

操作如下:

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

至此创建完毕,后面开始配置服务端socket

2、开始配置服务端socket

注:配置代码写在 index.js 文件

① 下载所需的依赖
npm install express file http socket.io
② 做socket服务端配置
// 引入express库
var app = require("express")();

// 创建http服务器并将express应用程序作为参数传入
var http = require("http").Server(app);

// 引入Socket.IO库,并将http服务器和配置选项作为参数传入来创建Socket.IO实例
var io = require("socket.io")(http, {
    // 允许使用EIO3协议
  allowEIO3: true,
    // 跨域配置,指定允许跨域的源地址、请求方法和凭据(credentials)设置
  cors: {
    origin: "http://localhost:3000",
    methods: ["GET", "POST"],
    credentials: true,
  },
});


// 定义根路由"/"的GET请求处理函数
app.get("/", (req, res) => {
  // 发送index.html文件作为响应
  res.sendFile(__dirname + "/index.html");
});


// 监听客户端发送的连接,端口一定要和客户端的匹配上
http.listen(3000, () => {
  console.log("listening on *:3000");
});
③ 启动 node 服务端

 如果没有启动服务端。客户端会一直报websocket的错,属于正常现象,启动node项目就行了

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

打开chat下的终端,输入 node index.js 启动项目,建立网络连接,客户端就不会再报错了

注:每次修改服务端代码都要重新启动一次

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

④ connection 钩子的使用
// 定义根路由"/"的GET请求处理函数
app.get("/", (req, res) => {
  // 发送index.html文件作为响应
  res.sendFile(__dirname + "/index.html");
});


// 新增的代码
// 监听客户端连接
io.on("connection", (socket) => {
  console.log("有用户连接");
})


// 监听客户端发送的连接,端口一定要和客户端的匹配上
http.listen(3000, () => {
  console.log("listening on *:3000");
});

connection钩子是on方法内置的, 当有客户端发起连接并成功时会触发该钩子,效果如下

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

至此已经完成所有配置,下面分别介绍怎么通过socket实现群聊和私聊的逻辑

三、实现群聊

1、服务端代码

io.on("connection", (socket) => {
  console.log("有用户连接");

  // 自定义一个chat监听方法,当客户端发布到这个方法时,我们可以获取到发布的消息
  socket.on("chat", (msg) => {
    // broadcast: 是指你发送了消息,但是服务端会发送给除你之外的客户端,不会返回给你
    socket.broadcast.emit("advertise", msg);
  });
});

2、客户端代码

先写一些基本样式,随意写一下用于发送消息就行了,主要还是围绕功能讲

<template>
  <div class="chat">
    <div class="msgList">
      <div class="item"></div>
    </div>

    <div class="input">
      <input type="text" v-model="msg" />

      <div class="btn" @click="input">send</div>
    </div>
  </div>
</template>

<style scoped lang="scss">
.chat {
  > .input {
    position: absolute;
    bottom: 10px;
    left: 0;
    right: 0;

    margin: 0 10px;

    display: flex;

    > input {
      flex: 1;
      padding-left: 5px;
    }

    > .btn {
      background: #999;
      padding: 3px 5px;
      margin-left: 10px;

      border-radius: 3px;
    }
  }
}
</style>

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

js代码

<script>
export default {
  data() {
    let msg = "";

    return { msg };
  },
  methods: {
    // 发布消息方法
    send() {
      // 将发布到服务端
      // 在服务端我们已经写好了对应的监听方法,只要有消息发布到服务端就会被接收到
      this.$socket.emit("chat", this.msg);

      // 清空输入框
      this.msg = "";
    },
  },
  // socket内置的钩子,用来监听服务端发布的方法
  sockets: {
    // 在服务端自定义的发布方法
    advertise(msg) {
      // 如果监听到服务端发来的信息,输出到控制台,这里可以写自己的业务逻辑
      console.log(msg);
    },
  },
};
</script>

尝试一下

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

先是输入消息,然后点击send按钮,结果如下

使用 vue-3-socket.io 插件以及node.js实现实时聊天(1),前端项目经验,socket.io 实时聊天,npm,vue.js,前端,websocket,node.js,javascript

在别的客户端接收到了消息打印在控制台中,并且发布消息的客户端没有监听到消息,至此我们就实现了群聊功能。

但是上述的群聊并非真正意义上的群聊,只是类似广播的功能,将信息发布到全部客户端中,可以用来做类似广场这样的功能;而群聊应该是创建一个聊天室,跟socket.io中的room属性有关,等后面再介绍这个功能。

这篇文章暂时写到这里,这两天会继续更新私聊的功能;下篇文章会讲到如何在宝塔中部署node项目并让你的代码在生产环境中正常运行,最后会在发布一篇有关群聊的文章,如果有疑惑可以在评论区留言,我每天都会追踪最新动态,如果有帮助就留下你的赞或关注吧文章来源地址https://www.toymoban.com/news/detail-742646.html

到了这里,关于使用 vue-3-socket.io 插件以及node.js实现实时聊天(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 如何在Node.js中使用WebSocket实现实时通信

    在Web应用程序中,实时通信已经成为一种必不可少的功能。WebSocket是一种基于TCP的协议,它提供了双向通信的能力,使得实时通信变得更加容易。Node.js提供了一个内置的WebSocket模块,使得开发实时通信应用程序变得非常简单。在本文中,我将介绍如何在Node.js中使用WebSocket实

    2024年02月14日
    浏览(12)
  • web前端在vue中通过海康插件嵌入视频,实现实时预览以及视频回放功能

      首先第一步,在海康官网下海康视频插件下载到电脑中海康开放平台    然后新建一个组件,下面我直接把我封装好的组件代码拿出来,重要的地方我在代码中添加了注释   以上是封装的组件,下面是调用的方法   

    2024年02月03日
    浏览(11)
  • 了解JS三种实时通信方式——Eventsource、websocket与socket.io之间的差异和优缺点

    EventSource EventSource 是一种轻量级的 API,用于获取来自服务器的实时事件。它是 WebSockets 的替代方案,因为它比 WebSockets 更简单,更适合处理服务器向客户端发送数据的情况。使用 EventSource ,只有服务器能够发送消息,所以它更安全。但是,它不支持双向通信或客户端发送消

    2024年02月08日
    浏览(10)
  • 如何使用websocket+node.js实现pc后台与小程序端实时通信

    如何使用websocket+node.js实现pc后台与小程序端实时通信

    实现功能:实现pc后台与小程序端互发通信能够实时检测到 1.安装ws依赖 2.创建index.js 3.打开终端,启动服务 这里是手动点击连接按钮,发起的websocket连接,可自行更改到其他合适的地方连接websocket 1.创建两个按钮,连接按钮,发送按钮 2.定义事件,连接ws

    2024年02月03日
    浏览(10)
  • 如何实现前端实时通信(WebSocket、Socket.io等)?

    如何实现前端实时通信(WebSocket、Socket.io等)?

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年01月22日
    浏览(13)
  • vue和node使用websocket实现数据推送,实时聊天

    vue和node使用websocket实现数据推送,实时聊天

    需求:node做后端根据websocket,连接数据库,数据库的字段改变后,前端不用刷新页面也能更新到数据,前端也可以发送消息给后端,后端接受后把前端消息做处理再推送给前端展示 使用node ./app.js运行项目 在需要使用websocket连接的页面引入 默认如下: id为243 在数据库改为

    2024年02月15日
    浏览(16)
  • websocket实时通讯和socket.io实时通信库的使用;心跳机制与断线重连

    https://zh.javascript.info/websocket WebSocket 是一种网络通信协议,就类似于 HTTP 也是一种通信协议。 为什么需要 WebSocket? 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。 代码解析: 创建WebSocket实例:通过 new WebSocket() 创建一个WebSocket实例。在括号中传入服务器的URL,该URL指定了

    2024年02月16日
    浏览(14)
  • 【Vue3+Ts project】认识 Websocket 以及 socket.io 库

    【Vue3+Ts project】认识 Websocket 以及 socket.io 库

    目录 Websocket  socket.io  Socket.iO 事件名总结: Socket.IO 方法总结 作用: WebSocket 仍然提供实时的双向通信功能,使用Vue3 应用程序能够与服务器进行实时数据交换 降低延迟和网络开销:相比传统的HTTP请求-响应模式,WebSocket建立了持久连接,减少了网络开销和延迟,适用于需要

    2024年02月13日
    浏览(8)
  • Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)

    Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(下)

    在进入文章的正文之前,我们先一起了解一下关于 CSDN 今年的 1024 程序员节。与此同时这也是我在 CSDN 参与的第二个 1024 程序员节日,转眼间也快写博客两年时间,去年很遗憾没有去到深圳(疫情原因)线下参加这个有趣而充实的峰会。今年没有特殊情况的话一定会如约而至

    2024年02月06日
    浏览(12)
  • Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(上)

    Vue3 开发实战分享——打印插件 Print.js 的使用(Vue3 + Nodejs + Print.js 实战)以及 el-table 与 el-pagination 的深入使用(上)

    今天久违的更新一下关于 Vue 的文章了,本篇文章是基于 Vue3 + Node.js + ElementPlus 的实战项目分享,实战内容包括有打印插件 Print.js 的使用,以及关于 ElementPlus 中的 el-table 与 el-pagination 的深入使用。本次项目以文章(axios 实战进阶练习——基于 Vue3 + Node.js + ElementPlus 实现的联

    2024年02月06日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包