この記事では主に基本的なチャットの実装方法を紹介します。今後は絵文字や写真のアップロードなどの機能も追加していく予定です。 実は、初めて触ったときに一番疑問に思ったのは、チャット機能の初期段階でフレームワークを構築したり、何かをダウンロードしたりする必要があるのではないかということ。結果的には、WebSocketがそのまま使えて、フロントエンドとバックエンドのマッチングも取れ、しかも無料。有料の機能も今のところ見当たりません。 実装効果図: まず、websocket.js ファイルをカプセル化します (直接コピーして、データの受信/送信形式を独自のものに変更することもできます) '@/store' からストアをインポートします var webSocket = null; var globalCallback = null; //外部データ受信用のコールバック関数を定義する //WebSocketを初期化する エクスポート関数 initWebSocket (url) { // ブラウザがWebSocketをサポートしているかどうかを判定する if (ウィンドウ内に「WebSocket」がある場合) { webSocket = new WebSocket(url); //ソケットオブジェクトを作成する } else { alert("このブラウザはWebSocketをサポートしていません!"); } // 開く webSocket.onopen = function () { webSocket を開きます。 }; //メールを受信するwebSocket.onmessage = function (msg) { webSocketOnMessage(メッセージ); }; //閉じる webSocket.onclose = function () { webSocket を閉じる(); }; //接続エラー発生時のコールバックメソッド webSocket.onerror = function () { console.log("WebSocket接続エラー"); }; } //接続ソケットが確立されたときにトリガーする export function webSocketOpen () { console.log("WebSocket接続が成功しました"); } //クライアントがサーバーからデータを受信したときにトリガーされます。eは受信したデータオブジェクトです。エクスポート関数webSocketOnMessage(e) { // ストアに保存し、チャットインターフェースの変更を監視して、受信した情報を自動的に取得します store.commit('user/SET_WS_MSG', e) } //データエクスポート関数webSocketSend(data)を送信{ console.log('データを送信'); //ここで必要に応じてデータ形式を変換します webSocket.send(JSON.stringify(data)); } //ソケットを閉じる エクスポート関数webSocketClose() { webSocket.close() console.log("会話接続が閉じられました"); // } } //データの送受信にソケットが必要な他の場所で呼び出される関数 export function sendSock (agentData, callback) { globalCallback = callback; //このコールバックは、他の場所で呼び出されたときに定義されるソケットデータを受信するための関数であり、非常に重要です。 //以下の判断は主にソケット接続の中断やその他の要因の可能性に基づいており、メッセージを再送信できます。 スイッチ (webSocket.readyState) { //CONNECTING: 値は 0 で、接続中であることを示します。 webSocket.CONNECTINGの場合: setTimeout(関数() { console.log('接続中...'); webSocketSend(エージェントデータ、コールバック); }, 1000); 壊す; //OPEN: 値は 1 で、接続が成功し、通信が可能であることを示します。 webSocket.OPENの場合: console.log('接続に成功しました'); webSocketSend(エージェントデータ); 壊す; //CLOSING: 値は 2 で、接続が閉じていることを示します。 webSocket.CLOSINGの場合: setTimeout(関数() { console.log('接続を閉じています'); webSocketSend(エージェントデータ、コールバック); }, 1000); 壊す; //CLOSED: 値は 3 で、接続が閉じられたか、接続の開始に失敗したことを示します。 webSocket.CLOSEDの場合: console.log('接続が閉じられました/開けませんでした'); // 何かをする 壊す; デフォルト: // これは決して起こりません 壊す; } } //ソケット初期化関数、データ送信(受信)関数、接続終了関数をエクスポートします。export default { WebSocketの初期化、 webSocketClose、 送信Sock }; vuexのストレージで受信したデータを定義する ストア/モジュール/user.js 状態 = { webSocketメッセージ: '' }; //状態を変更する const 変異 = { //Websocketによってプッシュされたメッセージを保存する SET_WS_MSG: (state, msg) => { state.webSocketMsg = メッセージ } } // ミューテーションを送信します。 acceptブロックに問題がある場合は、これを追加して//const actions = {を確認してください。 // webSockets ({ コミット }) { // コミット('SET_WS_MSG', 2) // } // ストア/getters.js //状態を取得する const getters = { webSocketMsg: 状態 => state.user.webSocketMsg } デフォルトのゲッターをエクスポートする 次に、チャットインターフェースでwebsocket.vueの使用を開始します。 <スクリプト> '@/utils/websocket.js' から { initWebSocket、sendSock、webSocketClose } をインポートします。 エクスポートデフォルト{ データ() { 戻る { // このアドレスはバックエンドによって提供され、Websocket に接続するために使用されます。 暗号化されたwss 暗号化されていないws wsUrl:'ws://アドレス', } }, // ストアから受信した情報を取得します。計算: { getSocketMsg() { this.$store.state.user.webSocketMsg を返します }, }, //getSocketMsgを監視して、データを受信したかどうかを確認します。watch: { ソケットメッセージの取得: { ハンドラ: 関数 (val) { this.getConfigResult(val) }, }, // このステップはチャット ボックスの CSS デザインです。これを記述する必要はありません。必要なときに参照できます。 // 受信メッセージと送信メッセージを obList に保存し、値の変化を監視してチャットの位置を一番下に保ちます (CSS では overflow: auto;) オブリスト: { ハンドラ: 関数 (val) { this.$nextTick(() => { this.$refs.chatContent.scrollTop = this.$refs.chatContent.scrollHeight }) }, }, 即時: true、 }, メソッド: { // ボタンをクリックしてチャット接続を確立します customerDialog() { WebSocket を初期化します(this.wsUrl) }, // データを返すソケットコールバック関数を受信するためのメソッド。この関数は、受信したデータを監視するときに呼び出されます(上記のウォッチ内) getConfigResult(val) { }, // 送信ボタンをクリックしてメッセージを送信します---送信するメッセージの形式はバックエンドで確認する必要があります sending() { sendSock('メッセージを送信しました') }, // チャットボックスの終了イベントを処理する handleClose() { //接続を閉じる webSocketClose() }, }, } </スクリプト> 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Tomcat を再デプロイした後にイメージやその他のリソースが自動的に削除される問題を解決します
>>: myBatis で条件を削除する際のスプライシング問題を解決する
スプライト:以前は、各画像リソースは独立した画像でした。ブラウザが Web サイト内のさまざまな W...
この記事では、チェックボックスコンポーネントのカプセル化を実装するためのvue3.0の具体的なコード...
XHTML は CSS レイアウトの基礎です。jb51.net は常に XHTML 知識の習得を重視...
この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内...
Win10 システムに MySQL 8.0 をインストールする際に発生する問題と解決策は次のとおりで...
まず、公式サイト https://dev.mysql.com/downloads/mysql/5.7...
序文:場合によっては、MySQL に接続されたセッションが異常終了することが多く、エラー ログに「通...
この記事の例では、フォーム検証機能を実装するためのjsの具体的なコードを参考までに共有しています。具...
この記事では、MySQL 8.0.16 Win10 zip版のインストールと設定のグラフィックチュー...
Docker 公開方法は、DevOps (送信、コンパイル、パッケージ化、リリースなどの一連のイベ...
スタイル シートは、ドキュメントの表示方法、発音方法、または入力方法を記述します。スタイル シートは...
この記事では、動的なテーブル効果を実現するためのJavaScriptの具体的なコードを参考までに紹介...
目次1. 配列の分解2. オブジェクトの分解3. 不完全な解体4. 分割代入を使用して変数交換を実装...
問題現象最近、sysbench を使用して MySQL をテストしました。テストに長い時間がかかった...
目次概要プロミスレースメソッド約束の再パッケージ化中止コントローラAxiosプラグインにはキャンセル...