Websocket+Vuex implementiert eine Echtzeit-Chat-Software

Websocket+Vuex implementiert eine Echtzeit-Chat-Software

Vorwort

In diesem Artikel wird hauptsächlich WebSocket zum Herstellen einer langen Verbindung verwendet, die globalen Kommunikationseigenschaften von Vuex sowie die Überwachungs- und Berechnungsfunktionen zum Überwachen von Nachrichtenänderungen und zum Steuern von Seitenänderungen, um einen Echtzeit-Chat zu erreichen.

1. Der Effekt ist wie in der Abbildung dargestellt

Bildbeschreibung hier einfügen

2. Konkrete Umsetzungsschritte

1. Einführung in Vuex

Der Code lautet wie folgt (Beispiel):

//Vuex installieren
npm installiere vuex

//In main.js „import store from './store'“ einführen
neuer Vue({
    el: '#app',
    Router,
    speichern,
    rendern: h => h(App)
})

Ich habe eine einfache Kapselung von Vuex vorgenommen, wie in der folgenden Abbildung dargestellt. Sie können nach Ihren eigenen Gewohnheiten vorgehen.

Bildbeschreibung hier einfügen

2.Webscoked-Implementierung

Die Webscoked-Implementierung ist im Wesentlichen in die folgenden Teile unterteilt:

Herstellen einer Verbindung

Senden von Heartbeat-Paketen

Nach Ausfall oder Fehler erneut verbinden

konstanter Zustand = {
    URL: '',
    webSocket: null,
    lockReconnect: false,
    Nachrichtenliste: [],
    msgItem: {},
    PingInterval: null,
    timeOut: null,
}
const Mutationen = {
    [Typen.INIT_WEBSOCKET](Status, Daten) {
        Zustand.webSocket = Daten
    },
    [Typen.LOCK_RE_CONNECT](Status, Daten) {
        state.lockReconnect = Daten
    },
    [Typen.SET_PING_INTERVAL](Status, Daten) {
        state.pingInterval = Daten
    },
    [Typen.SET_MSG_LIST](Status, Daten) {
        Status.MessageList.Push(Daten)
        state.msgItem = Daten
    },
}
const Aktionen = {
  initWebSocket({ Status, Commit, Dispatch, RootState }) {
        wenn (Zustand.webSocket) {
            zurückkehren
        }
        const realUrl = WSS_URL + rootState.doctorBasicInfo.token 
        const webSocket = neuer WebSocket(realUrl)
        webSocket.onopen = () => {
            console.log('Verbindung herstellen');
            Versand('HerzCheck')
        }
        webSocket.onmessage = e => {
            console.log('Empfangene Nachricht', e);
            versuchen {
                wenn (Typ von e.data === 'Zeichenfolge' und e.data !== 'PONG') {
                    let res = JSON.parse(e.data)
                    console.log('Empfangener Inhalt', res);
                    commit('SET_MSG_LIST', res)
                }
            } Fang (Fehler) {}
        }
        webSocket.onclose = () => {
            console.log('schließen');
            Versand('erneut verbinden')
        }
        webSocket.onerror = () => {
            console.log('fehlgeschlagen');
            Versand('erneut verbinden')
        }

        commit('INIT_WEBSOCKET', webSocket)
    },
    // Heartbeat-Paket heartCheck({ state, commit }) {
        console.log(Status, 'Status');
        const { webSocket } = Status
        const pingInterval = setInterval(() => {
            wenn (webSocket.readyState === 1) {
                webSocket.send('PING')
            }
        }, 20000)
        commit('SET_PING_INTERVAL', Ping-Intervall)
    },
    //Erneut verbinden reConnect({ status, commit, dispatch }) {
        wenn (Zustand.SperreNeuverbinden) {
            zurückkehren
        }
        commit('INIT_WEBSOCKET', null)
        commit('LOCK_RE_CONNECT', wahr)
        setzeTimeout(() => {
            Versand('initWebSocket')
            commit('LOCK_RE_CONNECT', falsch)
        }, 20000)
    },
 }
const getter = {
    webSocket: Status => Status.webSocket,
    Nachrichtenliste: Status => Status.Nachrichtenliste,
    msgItem: Status => Status.msgItem,
}
Standard exportieren {
    Namespace: wahr,
    Zustand,
    Aktionen,
    Mutationen,
    Getter
}

Seitenabruf

Methoden: {
...mapActions("webSocket", ["initWebSocket", "schließen"]),
   drückeItem(Item) {
      const initMsg = Element;
      diese.msgList.push(initMsg);
    }
}
montiert() {
	dies.initWebSocket();
}
betrachten:
    msgItem: Funktion (Item) {
        dies.pushItem(item);
    }
  },
berechnet: {
    ...mapGetters("webSocket", ["messageList", "msgItem"]),
   
  },

Benutzeroberfläche

 <li v-for="(Element, i) in msgList" :key="i" class="msgBox"></li>

Erläuterung der im Web bereitgestellten Implementierungsideen

1. Erstellen Sie zunächst einen WS-Link in Aktionen.

2. Verwenden Sie das Überwachungsattribut, um die entsprechenden Nachrichtenänderungen im Status auf der Seite zu überwachen. Wenn eine neue Nachricht empfangen wird, ändern Sie die auf der Seite angezeigte Nachrichtenliste und verwenden Sie die bidirektionale Bindung, um automatische Seitenaktualisierungen zu erreichen.

3. Rufen Sie beim Senden einer Nachricht die Backend-Schnittstelle auf und fügen Sie die neue Nachricht in die auf der Seite angezeigte Nachrichtenliste ein

4. Da es sich bei ws um einen langen Link handelt, der nach seiner Herstellung nicht so leicht getrennt werden kann, muss, solange die vom Backend gepushte Nachricht empfangen wird und festgestellt wird, ob Nachrichteninhalt vorhanden ist, nur die Nachrichtenliste im Status geändert werden, wenn Nachrichteninhalt vorhanden ist. Die Seite wird dann automatisch entsprechend dem Überwachungsattribut aktualisiert, wodurch die Instant Messaging-Funktion perfekt realisiert wird.

Zusammenfassen

Dies ist das Ende dieses Artikels über die Implementierung einer Echtzeit-Chat-Software mit WebSocket+Vuex. Weitere relevante Inhalte zum Echtzeit-Chat mit WebSocket+Vuex finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Vue+Websocket implementiert einfach die Chat-Funktion
  • Vue verwendet WebSocket, um die Chat-Funktion zu simulieren
  • Vue + WebSocket + WaveSurferJS zur Implementierung eines H5-Chat-Dialoginteraktionsbeispiels
  • Implementierung einer einfachen WebSocket-Chat-Funktion basierend auf Node+Vue
  • Mehrpersonen-Online-Chatroom basierend auf Vue und WebSocket
  • Das Vue + Webterminal imitiert die Chatroom-Funktion der WeChat-Webversion
  • Vue.js imitiert das WeChat-Chatfenster, um Komponentenfunktionen anzuzeigen
  • Vue + socket.io implementiert einen einfachen Chatroom-Beispielcode
  • Vue implementiert WebSocket-Kundendienst-Chatfunktion

<<:  So verwenden Sie den Linux-Befehl „basename“

>>:  Ursachen und Lösungen für langsame MySQL-Abfragegeschwindigkeit und schlechte Leistung

Artikel empfehlen

XHTML-Tutorial: Der Unterschied zwischen Transitional und Strict

Tatsächlich ist XHTML 1.0 in zwei Typen unterteil...

Verwenden Sie nginx, um virtuelle Hosts auf Domänennamenbasis zu konfigurieren

1. Was ist ein virtueller Host? Virtuelle Hosts v...

Detaillierte Erklärung der Verwendung des Linux-Befehls „tee“

Der Befehl tee wird hauptsächlich verwendet, um d...

Einführung in die grafischen Kompositions- und Satzfunktionen des Webdesigns

Alles braucht ein Fundament. Um ein Haus zu bauen...

Detaillierte Erklärung zur Formatierung von Zahlen in MySQL

Aus beruflichen Gründen musste ich kürzlich Zahle...

Vorschläge zum Erstellen geschäftlicher HTML-E-Mails

Durch E-Mail-Marketing auf Genehmigungsbasis lass...

CSS3-Eigenschaft line-clamp steuert die Verwendung von Textzeilen

Beschreibung: Begrenzen Sie die Anzahl der Textze...

Font Treasure House 50 exquisite kostenlose englische Schriftartenressourcen Teil 2

Designer verfügen über eine eigene Schriftartenbi...

js realisiert den Lupeneffekt von Produkten auf Einkaufswebsites

In diesem Artikel wird der spezifische Code von j...

Docker+Gitlab+Jenkins erstellt automatisierte Bereitstellung von Grund auf

Inhaltsverzeichnis Vorwort: 1. Docker installiere...

MySQL MSI Installations-Tutorial unter Windows 10 mit Bildern und Text

1. Herunterladen 1. Klicken Sie auf den neuesten ...

Webdesign: Implementierungstechniken für Webmusik

<br />Wenn Sie Musik in eine Webseite einfüg...

js implementiert eine auf Canvas basierende Uhrkomponente

Canvas war schon immer ein unverzichtbares Tag-El...

Uniapp WeChat-Applet: Lösung bei Schlüsselfehler

Uniapp-Code <Vorlage> <Ansicht> <i...

Docker stellt über einen Port eine Verbindung zu einem Container her

Docker-Container-Verbindung 1. Netzwerk-Port-Mapp...