利用Websocket进行前后端通信

这篇具有很好参考价值的文章主要介绍了利用Websocket进行前后端通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、websocket是什么

是一种基于TCP协议的网络通信技术,它提供了一个持久的、全双工的通信通道,可以在客户端和服务器之间进行实时的双向通信。
特点:WebSocket允许服务器主动向客户端推送数据,而不需要客户端发送请求。这种实时通信的特性使得WebSocket非常适合在Web应用中实现实时消息推送、实时数据更新等功能。

二、前后端交互的方式

  1. 客户端ajax请求等等;
  2. 服务器主动向客户端推送消息
  3. 轮询 客户端定时向服务器发送请求,服务器 接到请求后马上返回响应信息并关闭连接
  4. 长连接 客户端与服务器保持不间断的连接;

三、使用koa2结合 socket.io:socket.io是对websocket的封装,用于客户端与服务端的相互通讯
(聊天室的例子:服务器主动向客户端推送消息)

后端
1.安装socket.io

npm install socket.io --save

在index.js 入口文件导入



const Koa = require('koa');
const cors = require('koa2-cors');

const server = require('http').Server(app.callback())
const io = require('socket.io')(server, {cors: true})
const { handleChatRoom } =require('./modules/chatRoomSocket.js')	// 导入模块
handleChatRoom(io)													//调用handleChatRoom方法传io

//监听端口
server.listen(3006, () => {
  console.log('socket server run at 3006')
})

2.chatRoomSocket.js 模块

const { doSQL, getOne } = require('../utils/database')

const save = async (form) => {
  const sql = 'insert into chat_room (name, avatar, gender, content) values (?,?,?,?)'
  const res = await doSQL(sql, [form.name, form.avatar, form.gender, form.content])
  // console.log(res)
}

const getList = async () => {
  const sql = 'select * from chat_room order by id'
  const res = await doSQL(sql)
  return res
}

const handleChatRoom = (io) => {
  io.on('connection', async (socket) => {  //客户端与服务端建立连接
    console.log('socket 初始化成功')
    socket.emit('get-list', await getList())
    socket.on('send-message', async (data) => {
      console.log(data)
      await save(data)
      //给所有的客户端广播消息
      io.sockets.emit('get-list', await getList())
    })
    
  })
}

module.exports = {
  handleChatRoom
}



//给出了自己外的客户端广播消息
//client.broadcast.emit('message',value)

前端
1.安装依赖文章来源地址https://www.toymoban.com/news/detail-651544.html

npm install socket.io-client  --save
<script setup lang="ts">
import { ref, onMounted, watch, nextTick } from 'vue'
import io from 'socket.io-client' 

let socket
const list = ref([])
const box = ref()
const form = ref({
  content : '',
  name:'mil',
  avatar:'test.png',
  gender:0
})


// 监听 渲染页面的数组
watch(list.value,()=>{
    scrollBottom()
})
onMounted(()=>{
  socket= io('http://localhost:3006')
  socket.on('connect' , () =>{
    console.log(socket.id,'监听客户端成功');  
  })
  socket.on('get-list',(data) => {
    list.value = data 
    scrollBottom()
  })


})

//滚动条保持在底部
const scrollBottom = () => {
  nextTick(()=>{
    box.value.scrollTop = box.value.scrollHeight
  })
}
const send = ()=> {
  socket.emit('send-message',form.value)
  form.value.content=''
}
</script>

<template>
  <h2>聊天室</h2>
  <div class="list" ref="box">
    <ul>
      <li v-for="item in list">{{item.content}}</li>
    </ul>
  </div>
  <div class="footer">
    <textarea class="message" v-model="form.content"></textarea>
    <button @click="send">发送</button>
  </div>
</template>

<style scoped>
  .list {
    border: 1px solid #ccc;
    height: 200px;
    overflow-y: auto;
  }
  .list > ul {
    display: flex;
    flex-direction: column-reverse;
  }
  .footer {
    display: flex;
    margin-top: 10px;
    height: 100px;
  }
  .footer textarea {
    outline: none;
  }
  .footer button {
    width: 100px;
  }
  .message {
    flex-grow: 1;
  }
</style>

到了这里,关于利用Websocket进行前后端通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 前后端 websocket 通信

    项目框架 后端: springboot 项目 前端: vue 项目   pom 文件添加依赖   websocket 实现类 ServerEndpoint 注解:定义 websocket 连接名,调用此接口时,开启 websocket 连接,即调用 onOpen 方法 onOpen:开启连接 onClose:关闭连接 onMessage:接收对方发送的消息 sendMessage:向所有连接此后台的另

    2023年04月09日
    浏览(30)
  • nodejs实现前后端websocket通信+心跳示例

    nodejs后端代码  server.js 直接在文件所在目录打开cmd窗口,启动服务: node server.js 浏览器端  index.html 在本地直接运行浏览器即可! 如果有帮助,就点个赞再走 ^  ^                                               

    2024年02月13日
    浏览(36)
  • Spring Boot整合WebSocket实现实时通信,前端实时通信,前后端实时通信

    实时通信在现代Web应用中扮演着越来越重要的角色,无论是在线聊天、股票价格更新还是实时通知,WebSocket都是实现这些功能的关键技术之一。Spring Boot作为一个简化企业级应用开发的框架,其对WebSocket的支持也非常友好。本文将详细介绍如何在Spring Boot中整合WebSocket,实现一

    2024年04月27日
    浏览(38)
  • SpringBoot项目整合WebSocket+netty实现前后端双向通信(同时支持前端webSocket和socket协议哦)

    目录   前言 技术栈 功能展示 一、springboot项目添加netty依赖 二、netty服务端 三、netty客户端 四、测试 五、代码仓库地址   专属小彩蛋:前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站(前言 - 床长人工智能教程

    2024年02月12日
    浏览(47)
  • 进度变动实时通知-使用SocketIO实现前后端的通信(基于WebSocket的实时通信库)

    最近在接触的一个项目,将PDF上传到项目里,通过调用OCR云服务把PDF里的表格数据识别出来。在此过程中,前后端需要实时通信,对识别数据进行“进度跟踪”。因此我们采用SocketIO的通讯方式,识别中前端和后端服务建立SocketIO连接,根据事件进行数据的实时更新百分比进度

    2024年02月06日
    浏览(51)
  • Spring WebSocket实现实时通信,构建高可靠的实时交互系统

    Spring WebSocket是基于WebSocket协议的一个开源框架,它使得开发人员可以更加方便地建立实时通信机制,以推送消息和数据并实时更新通信系统中的状态。Spring WebSocket被广泛应用于社交网站、电子商务、在线游戏等WEB应用程序中,以实现实时通信和即时响应。 Spring WebSocket的一个

    2024年02月12日
    浏览(49)
  • 利用websockify将websocket通信转换成tcp

    目前遇到一个问题,原本的服务都是利用tcp通信的,但是某些平台只支持websocket,是不是要从头实现一套websocket网络收发逻辑呢?短时间内有没有替代方案呢?在经过一番寻找之后发现了websockify这个神器,可以将websocket协议转换成tcp协议,从而实现不修改应用服务就支持tc

    2024年02月04日
    浏览(31)
  • Spring Boot进阶(49):SpringBoot之集成WebSocket实现前后端通信 | 超级详细,建议收藏

            在上一期,我对WebSocket进行了基础及理论知识普及学习,WebSocket是一种基于TCP协议实现的全双工通信协议,使用它可以实现实时通信,不必担心HTTP协议的短连接问题。Spring Boot作为一款微服务框架,也提供了轻量级的WebSocket集成支持,本文将介绍如何在Spring Boot项

    2024年02月14日
    浏览(40)
  • Thinkphp5.0 安装使用Workerman实现websocket前后端通信,后端主动推送消息到前端

    安装使用Workerman实现websocket前后端通信,后端主动推送消息到前端,实现后端有数据更新时,前端页面自动更新数据。 我使用的是基于Thinkphp5.0的ThinkCMF5.0。 安装: 启动: public目录下放置的server.php文件,注意里面的配置必须按照你的Worker控制器来: woker控制器: 后端主动推

    2024年02月16日
    浏览(52)
  • Python使用flask框架与前端建立websocket链接,并进行数据交互

    后端采用的框架为flask,前端用的flask自带的html编写,实现的功能为:前后端建立websocket链接并进行数据交互 一、编写一个flask后端服务 常规创建方式就可以,创建一个flask服务。声明一个websocket实例,以websocket的方式启动这个服务。 安装相关依赖: 声明应用和websocket实例

    2024年04月11日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包