国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

websocket+elementui+vue實(shí)現(xiàn)簡(jiǎn)易聊天室

這篇具有很好參考價(jià)值的文章主要介紹了websocket+elementui+vue實(shí)現(xiàn)簡(jiǎn)易聊天室。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

搭建服務(wù)端環(huán)境

npm install socket.io

安裝socket.io

服務(wù)端基于node,js的express框架生成,所以寫成模塊,引入至app.js中

const app = require('./app')
const http = require('http')
const socketIo = require('socket.io')
const httpServer = http.Server(app)
const io = socketIo(httpServer , {})
const users = {}
io.on('connection' , (socket)=>{
  socket.on('login' , (nikname)=>{
    if(users[nikname]){
      socket.emit('repeat' , '昵稱重復(fù)')
      return 
    }
    socket.nikname = nikname
    users[nikname] = {
      name: nikname,
      socket : socket,
    }
    io.sockets.emit('logged' , {nikname , isLogin:true} )
  })
  socket.on("disconnecting", (reason) => {
    let nikname = socket?.nikname
    if(nikname && users[nikname]){
      delete users[nikname]
      io.sockets.emit('logout' , {nikname , isLogin: false} )
      delete socket[nikname]
    }
    console.log('斷開連接')
  });
  socket.on('chat' , (data)=>{
    console.log(data , socket.nikname)
    socket.broadcast.emit('response_chat' , {
      nikname: socket.nikname,
      msg: data
    })
  })
  
})
httpServer.listen(8888)
module.exports = httpServer

其中,io.sockets.emit用于向所有建立連接的客戶端發(fā)送信息,socket.broadcast.emit用于向除發(fā)送方之外的客戶端發(fā)送信息。

客戶端基于vue和elementui

<template>
  <div>
    <div class="talkView--content--body">
      <ul>
        <li v-for="(item, idx) in chatList" :key="idx">
          <div :class="item.style">
            <div v-if="item.style === right">
              <span>{{ item.msg }}</span>
            </div>
            <div v-else>
              <span v-show="item.nikname">{{ item.nikname }}:</span>
              <span>{{ item.msg }}</span>
            </div>
          </div>
        </li>
      </ul>
    </div>
    <div class="talkView--content--control">
      <el-input v-model="sendMsg" placeholder="請(qǐng)輸入內(nèi)容"></el-input>
      <el-button type="primary" @click="send" class="width100"
        >發(fā)送消息</el-button
      >
    </div>
    <el-dialog title="輸入昵稱" :visible="dialogVisible" width="30%">
      輸入昵稱:
      <el-input v-model="nikname"> </el-input>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="login">確 定</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import { io } from "socket.io-client";
export default {
  beforeDestroy() {
    // 斷開連接
    this.socket.disconnect();
  },
  data() {
    return {
      socket: null,
      sendMsg: "",
      nikname: "",
      dialogVisible: false,
      chatList: [],
    };
  },
  created() {
    this.socket = io("ws://127.0.0.1:8888", {
      transports: ["websocket"],
    });
    this.getNikname();
    this.socket.on("connect", () => {
      console.log("建立連接"); // ojIckSD2jqNzOqIrAGzL
    });
    this.socket.on("response_chat", (data) => {
      this.severChat(data);
    });
    this.socket.on("logged", (data) => {
      this.severLog(data);
    });
    this.socket.on("logout", (data) => {
      this.severLog(data);
    });
  },
  mounted() {},

  methods: {
    severLog({ nikname, isLogin }) {
      let state = isLogin ? "進(jìn)入" : "離開";
      let msg = `${nikname}${state}聊天室`;
      this.addChat({
        msg,
        style: "center",
      });
    },
    addChat({ msg = "xxx", nikname = "", style = "xxx" }) {
      this.chatList.push({
        nikname,
        msg,
        style,
      });
    },
    getNikname() {
      let nikname = this.$store.state.userInfor?.nikname;
      if (nikname) {
        this.dialogVisible = false;
        this.socket.emit("login", nikname);
      }
      this.dialogVisible = !nikname;
      this.nikname = nikname;
    },
    login() {
      if (!this.nikname) {
        this.$notify({
          message: "昵稱不為空",
        });
        return;
      }
      this.socket.emit("login", this.nikname);
      this.dialogVisible = false;
    },
    send() {
      let msg = this.sendMsg;
      this.addChat({
        msg,
        nikname: this.nikname,
        style: "right",
      });
      this.socket.emit("chat", this.sendMsg);
      this.sendMsg = ''
    },
    severChat({ msg = "", nikname = "" }) {
      console.log(msg, nikname);
      this.addChat({
        nikname,
        msg,
        style: "left",
      });
    },
  },
};
</script>

<style lang="stylus" scoped>
ul
  list-style none
.talkView--content--body 
  width: 100%;
  height: 60vh;
  background-color: #fff;
  color: #333;
  .center
    text-align: center
  .left
    text-align: left
  .right
    text-align: right


.width100 {
  width: 100%;
  margin-top: 10px;
}
</style>

進(jìn)入聊天頁(yè)面后,先判斷用戶是否登錄,如果登錄,不必填寫昵稱,直接用用戶昵稱即可,反之,modal框會(huì)出現(xiàn),必須填寫昵稱。之后,前端觸發(fā)login事件,后端監(jiān)聽到login事件,io.sockets.emit向所有建立連接的客戶端發(fā)送xxx登錄信息,前端發(fā)送信息,觸發(fā)chat事件,后端監(jiān)聽到事件之后,做出響應(yīng),觸發(fā)response_chat事件。

涉及到的信息。存入chatList中,便于展示

例:

elementui聊天窗口,websocket,elementui,vue.js

elementui聊天窗口,websocket,elementui,vue.js

elementui聊天窗口,websocket,elementui,vue.js

elementui聊天窗口,websocket,elementui,vue.js

elementui聊天窗口,websocket,elementui,vue.js

elementui聊天窗口,websocket,elementui,vue.js文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-857111.html

到了這里,關(guān)于websocket+elementui+vue實(shí)現(xiàn)簡(jiǎn)易聊天室的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于WebSocket的簡(jiǎn)易聊天室的基本實(shí)現(xiàn)梳理

    基于WebSocket的簡(jiǎn)易聊天室的基本實(shí)現(xiàn)梳理

    目前在很多網(wǎng)站為了實(shí)現(xiàn)推送技術(shù)所用的技術(shù)都是 Ajax 輪詢。輪詢是在特定的的時(shí)間間隔(如每1秒),由瀏覽器對(duì)服務(wù)器發(fā)出HTTP請(qǐng)求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。HTTP 協(xié)議是一種無(wú)狀態(tài)的、無(wú)連接的、單向的應(yīng)用層協(xié)議。它采用了請(qǐng)求/響應(yīng)模型。通信

    2024年02月11日
    瀏覽(23)
  • Java+Vue實(shí)現(xiàn)聊天室(WebSocket進(jìn)階-聊天記錄)

    Java+Vue實(shí)現(xiàn)聊天室(WebSocket進(jìn)階-聊天記錄)

    WebSocket 是一種在單個(gè)TCP連接上進(jìn)行全雙工通信的協(xié)議。WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn)RFC 6455,并由RFC7936補(bǔ)充規(guī)范。WebSocket API也被W3C定為標(biāo)準(zhǔn)。 WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服

    2024年02月11日
    瀏覽(110)
  • 【W(wǎng)ebSocket&IndexedDB】node+WebSocket&IndexedDB開發(fā)簡(jiǎn)易聊天室

    【W(wǎng)ebSocket&IndexedDB】node+WebSocket&IndexedDB開發(fā)簡(jiǎn)易聊天室

    序幕介紹: WebSocket 是 HTML5 開始提供的一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議。 講人話就是說(shuō): WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)

    2024年02月10日
    瀏覽(47)
  • websocket實(shí)現(xiàn)聊天室(vue2 + node)

    websocket實(shí)現(xiàn)聊天室(vue2 + node)

    需求分析如圖: 搭建的項(xiàng)目結(jié)構(gòu)如圖: 前端步驟: vue create socket_demo (創(chuàng)建項(xiàng)目) views下面建立Home , Login組件 路由里面配置路徑 Home組件內(nèi)部開啟websocket連接 前端相關(guān)組件代碼: Login組件 Home組件 router/index.js 后端步驟: 在項(xiàng)目外層創(chuàng)建server文件夾(src目錄同級(jí)) npm init -y創(chuàng)建

    2024年01月22日
    瀏覽(101)
  • SpringBoot和Vue2集成WebSocket,實(shí)現(xiàn)聊天室功能

    springboot集成websocket實(shí)現(xiàn)聊天室的功能。如有不足之處,還望大家斧正。

    2024年01月23日
    瀏覽(27)
  • 【你的第一個(gè)socket應(yīng)用】Vue3+Node實(shí)現(xiàn)一個(gè)WebSocket即時(shí)通訊聊天室

    【你的第一個(gè)socket應(yīng)用】Vue3+Node實(shí)現(xiàn)一個(gè)WebSocket即時(shí)通訊聊天室

    這篇文章主要是用WebSocket技術(shù)實(shí)現(xiàn)一個(gè) 即時(shí)通訊聊天室 ,首先先要了解為什么使用WebSocket而不是普通的HTTP協(xié)議,如果使用HTTP協(xié)議它是下面這種情況: 我發(fā)送一條消息,發(fā)送一個(gè)發(fā)送消息的請(qǐng)求;* 一直輪詢接收別人發(fā)送的消息,不管有沒(méi)有發(fā)送都要定時(shí)去調(diào)用接口。這里明

    2023年04月20日
    瀏覽(31)
  • Qt實(shí)現(xiàn)簡(jiǎn)易聊天室

    Qt實(shí)現(xiàn)簡(jiǎn)易聊天室

    目錄 一、界面展示(界面用ui 設(shè)計(jì)) ?群成員展示界面( denglu) ? ?聊天界面展示( widget ) 二、代碼展示 (所有代碼非原創(chuàng)) ?denglu.h和widget.h ?denglu.cpp、main.cpp、widget.cpp 三、軟件制作 ?

    2024年02月08日
    瀏覽(26)
  • 在線聊天室(Vue+Springboot+WebSocket)

    在線聊天室(Vue+Springboot+WebSocket)

    實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的在線聊天室的前后端。前端用Vue實(shí)現(xiàn),后端用Springboot實(shí)現(xiàn)。 ????????在線聊天室的功能包括創(chuàng)建用戶和顯示在線用戶列表、發(fā)送消息和顯示消息列表、用戶和消息列表實(shí)時(shí)更新這幾點(diǎn)。以下是整體功能的活動(dòng)圖: 用戶身份 ? ? ? ? 進(jìn)入聊天室的用戶需

    2024年01月15日
    瀏覽(28)
  • 用Java實(shí)現(xiàn)簡(jiǎn)易聊天室

    用Java實(shí)現(xiàn)簡(jiǎn)易聊天室

    ? 說(shuō)明:如果一個(gè)?類,需要有界面的顯示,那么該類就需要繼承自JFrame,此時(shí),該類就可以被稱為一個(gè)“窗體類\\\"。 ? 服務(wù)端代碼: 客戶端代碼: ?啟動(dòng)時(shí),必須先啟動(dòng)服務(wù)端,再啟動(dòng)客戶端。 最終效果: ? ? ?

    2024年02月11日
    瀏覽(18)
  • LinuxC TCP實(shí)現(xiàn)簡(jiǎn)易聊天室

    LinuxC TCP實(shí)現(xiàn)簡(jiǎn)易聊天室

    目錄 1.概述 1.1聊天室設(shè)計(jì)內(nèi)容 2.系統(tǒng)設(shè)計(jì) 2.1系統(tǒng)功能設(shè)計(jì) 2.1.1用戶管理 2.1.2聊天室管理 2.1.3聊天管理 2.2系統(tǒng)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 2.3系統(tǒng)主要函數(shù)設(shè)計(jì) 3.系統(tǒng)實(shí)現(xiàn) 3.2功能模塊的程序流程圖及運(yùn)行界面 3.2.1功能模塊流程圖 ?3.2.2運(yùn)行界面 4.源代碼 4.1客戶端 4.2服務(wù)器 注:存在問(wèn)題 1

    2024年02月09日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包