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

猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題

這篇具有很好參考價值的文章主要介紹了猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

工作中用到了消息推送功能,之前了解過SOCKET 無意中了解到即時通訊框架SocketIO 簡單說兩句

Socket.IO 是什么

Socket.IO是一個庫,基于 Node.js 的實時應用程序框架。可以在瀏覽器和服務器之間實現(xiàn)實時,雙向和基于事件的通信。它適用于每個平臺、瀏覽器或設備,同樣注重可靠性和速度。

Socket.IO 起源

WebSocket 的產生源于 Web 開發(fā)中日益增長的實時通信需求,對比基于 http 的輪詢方式,它大大節(jié)省了網絡帶寬,同時也降低了服務器的性能消耗。
WebSocket 協(xié)議在2008年誕生,2011年成為國際標準。雖然主流瀏覽器都已經支持,但仍然可能有不兼容的情況,為了兼容所有瀏覽器,就誕生SocketIO。
SocketIO將WebSocket、AJAX和其它的通信方式全部封裝成了統(tǒng)一的通信接口,也就是說,我們在使用SocketIO時,不用擔心兼容問題,底層會自動選用最佳的通信方式。

Socket.io有什么特點

易用性:Socket.io封裝了服務端和客戶端,使用起來非常簡單方便。
跨平臺:Socket.io是跨平臺的,可以實現(xiàn)多平臺的即時通訊,Socket.io支持跨平臺,這就意味著你有了更多的選擇,可以在自己喜歡的平臺下開發(fā)實時應用。由于 iOS 端進行 socket 編程主要使用 GCDAsyncSocket 框架,但要實現(xiàn) Android、iOS、web 多平臺的通訊,還是選擇統(tǒng)一的框架或協(xié)議比較好。
自適應:Socket.io 實現(xiàn)了實時雙向的基于事件的通訊機制,是基于 webSocket 的封裝,但它不僅僅包括 webSocket,還對輪詢(Polling)機制以及其它的實時通信方式封裝成了通用的接口,并且在服務端實現(xiàn)了這些實時機制的相應代碼,它會自動根據瀏覽器從WebSocket、AJAX長輪詢、Iframe流等等各種方式中選擇最佳的方式來實現(xiàn)網絡實時應用,非常方便和人性化,而且支持的瀏覽器最低達IE5.5。

好了廢話不多說開始干活。

正文

第一步 創(chuàng)建nodeJS的http服務器,作為socket服務端

新建文件夾,命名為NodejsScoketDemo,然后使用終端,npm init ,一路回車即可

加入express依賴和socket.io依賴

npm install express socket.io

這是我使用的依賴版本
猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題
工程目錄如圖:

猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題

socket.js代碼

const express = require('express');
const http = require('http');
const socketIO = require('socket.io');
const app = express();
const server = http.createServer(app);
  
const io = socketIO(server,{
    cors: {
        origin: '*'
    }
});
  
io.on('connection',(socket) => {
    console.log('user connected');
    socket.on('hello',(data) => {
        console.log(`收到客戶端的消息:${data}`);
    })
});
  
  
app.get('/',(request, response) => {
    /*在瀏覽器發(fā)送 http://127.0.0.1:24000 的請求,客戶端定義了監(jiān)聽'message'的socket,所以可以接收消息,即使客戶端有代碼
        io.on('message',(data) => {
            console.log(data);
        });
    */
    io.emit('message','服務端向客戶端推送消息...');
    response.writeHead(200, {"Content-type": "text/plain"});
    response.end();
});
  
  
server.listen(24000,() => {
    console.log("server is up and running on port 24000");
});

谷歌度娘,十有八九都是說配置前端的config目錄下的index.js文件的代理,結果都是無效的,仍然報跨域被阻止的錯誤,其實關鍵不是說這個代理不用設置,要設置。關鍵在

(下邊這塊代碼僅用來說明展示,上面已經有了,不用再重復寫了)

const io = socketIO(server,{
    cors: {
        origin: '*'
    }
});

那么這時候,我們就可以直接使用命令啟動socket.js ,開啟http服務器,并且監(jiān)聽24000端口

node src/socket/socket.js

第二步 創(chuàng)建vue-cli腳手架,作為socket客戶端

npm init webpack vuesocketdemo

引入依賴

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

這些是我引入的依賴版本,理論上,只引入socket.io-client 依賴就夠了
猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題

我們在main.js導入依賴,并且使用它,SocketIO里面填寫ws://IP:監(jiān)聽的服務器端口

import Vue from 'vue'
import App from './App'
import router from './router'

import VueSocketIO from 'vue-socket.io'
import SocketIO from 'socket.io-client'

Vue.config.productionTip = false

Vue.use(new VueSocketIO({
  debug: true,
  connection: SocketIO('ws://127.0.0.1:24000')
}));

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

接下來,我們在conifg的index.js文件中配置代理,注意,第二個代理路勁的ws屬性必須設置為false,否則還會報跨域被阻止的錯誤

    proxyTable: {
      '/socket.io':{
        target: 'http://127.0.0.1:24000/', // target host
        changeOrigin: true, // needed for virtual hosted sites
        logLevel: 'debug'
      },
      '/sockjs-node': {
        target: 'http://127.0.0.1:24000',
        ws: false,
        changeOrigin: true
      }
    },

最后,我們在HelloWorld.vue 編寫socket代碼
在html部分,編寫一個按鈕和輸入框,用來發(fā)送消息給服務器

<template>
  <div class="hello">
    <input id="inputArea" type="text">
    <button @click="sendMsgToServer">hello發(fā)送消息給服務端</button>
    <button @click="getMsgToServer">獲取服務器信息</button>
  </div>
</template>

在javascript部分,連接到服務器,并且編寫一個發(fā)送輸入的消息給服務器的程序

<script>
import io from 'socket.io-client';
const socket = io('http://127.0.0.1:24000');
export default {
  name: 'HelloWorld',
  data () {
    return {
      msg: 'Welcome to Your Vue.js App'
    }
  },
  methods:{
    /*socket.emit('hello','xxx') 表示,服務端上定義了一個監(jiān)聽'hello'的socket,
      即服務端有代碼
      socket.on('hello',(data) => {
        //這是接收到的客戶端消息
        console.log(data);
      })
       */
    sendMsgToServer(){
      socket.emit('hello',document.getElementById("inputArea").value);
    }
  },
  created() {
    //一定要移除舊的message監(jiān)聽,否則會出現(xiàn)重復監(jiān)聽的狀況
    socket.removeListener('message');
    //這是移除所有監(jiān)聽
    // socket.removeAllListeners();
    console.log('這是移除所有監(jiān)聽');
    socket.on('message',(data) =>{
      console.log(data)
    });
  }
}
</script>

樣式部分我就沒定義了

第三步 測試

服務端啟動http服務器以監(jiān)聽socket 24000端口

node src/socket/socket.js

啟動客戶端vue

npm run dev

測試瀏覽器發(fā)送請求給http服務器,委托http服務器把消息推送給客戶端

猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題

測試瀏覽器發(fā)送請求給http服務器,委托http服務器把消息推送給客戶端

測試客戶端發(fā)送消息給服務端
猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題

猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題

猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題

結束

到此Nodejs的服務器端和vue的客戶端已經正常跑起來啦,撒花撒花…

接下來還有其它SockectIO的使用陸續(xù)更新,未完續(xù)待…
我的Demo源碼給出僅供大家參考,如有問題歡迎大家交流溝通,一起學習進步

鏈接: https://pan.baidu.com/s/1lmxPa4FJ8enHKGAvWleJFQ 提取碼: CSDN 復制這段內容后打開百度網盤手機App,操作更方便哦文章來源地址http://www.zghlxwxcb.cn/news/detail-419759.html

到了這里,關于猿創(chuàng)征文|vue中SocketIO的正確使用方法,并且解決跨域問題的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 正確使用 equals 方法

    Object的equals方法容易拋空指針異常,應使用常量或確定有值的對象來調用 equals。 舉個例子: 運行上面的程序會拋出空指針異常,但是我們把第二行的條件判斷語句改為下面這樣的話,就不會拋出空指針異常,else 語句塊得到執(zhí)行。: 不過更推薦使用 java.util.Objects#equals (JDK

    2024年02月14日
    瀏覽(22)
  • 如何正確使用 JavaScript 中的 slice() 方法

    如何正確使用 JavaScript 中的 slice() 方法

    在 JavaScript 中, slice() 是一個常用的數(shù)組方法,用于從現(xiàn)有數(shù)組中提取一部分元素,然后返回一個新的數(shù)組。它是一個非常有用的工具,可以幫助你在不改變原始數(shù)組的情況下操作數(shù)組的子集。本文將介紹 slice() 的基本概念、使用方法、實踐案例和互動練習,以幫助你更好地

    2024年01月18日
    瀏覽(21)
  • 使用 FreeRTOS 時使用 GPIO 監(jiān)控 CPU 負載的正確方法?

    總目錄鏈接== AutoSAR入門和實戰(zhàn)系列總目錄 總目錄鏈接== AutoSAR BSW高階配置系列總目錄 我想切換一些 GPIO 以監(jiān)控 CPU 活動和 FreeRTOS 上下文。更具體地說,我想: 在 CPU 休眠時讓 GPIO 處于邏輯低狀態(tài),在 CPU 運行時(任務、中斷中)讓 GPIO 處于邏輯狀態(tài)高, 當 CPU 在工作時,GP

    2023年04月17日
    瀏覽(29)
  • 猿創(chuàng)征文 | Shell編程【上篇】

    猿創(chuàng)征文 | Shell編程【上篇】

    目錄 1,Shell編程 1.1:簡介 1.1.1:shell解釋器 1.2:快速入門 1.2.1:編寫腳本 1.2.2:執(zhí)行shell腳本 1.3:shell變量 1.3.1:簡介 1.3.2:使用變量 1.3.3:刪除變量 1.3.4:只讀變量 ?1.4:字符串 1.4.1:單引號 1.4.2:雙引號? 1.4.3:獲取字符串長度? ?1.4.4:提取子字符串 ?1.5:傳遞參數(shù) 1

    2024年02月02日
    瀏覽(24)
  • 猿創(chuàng)征文 |【Linux】常用命令

    猿創(chuàng)征文 |【Linux】常用命令

    ?? 博客主頁: ??@不會壓彎的小飛俠 ? 歡迎關注: ?? 點贊 ?? 收藏 ? 留言 ? ? 系列專欄: ??Linux專欄 ? 歡迎加入社區(qū): ??不會壓彎的小飛俠 ? 人生格言:知足上進,不負野心。 ?? 歡迎大佬指正,一起學習!一起加油! command [-options] [parameter] command:命令名 [-o

    2024年01月16日
    瀏覽(56)
  • Python 爬蟲使用代理 IP 的正確方法

    代理 IP 是爬蟲中非常常用的方法,可以避免因為頻繁請求而被封禁。下面是 Python 爬蟲使用代理 IP 的正確方法: 1. 選擇可靠的代理 IP 供應商,購買或者免費使用代理 IP 列表。 2. 在爬蟲中使用第三方庫 requests ,并在 requests.get() 或 requests.post() 請求時添加代理 IP 參數(shù),例如:

    2024年02月11日
    瀏覽(35)
  • 猿創(chuàng)征文|【HTML】標簽學習之路

    猿創(chuàng)征文|【HTML】標簽學習之路

    ?? 目錄 一、HTML語法規(guī)范 1.基本語法概述 2.標簽關系 二、HTML基本結構標簽 1.第一個HTML頁面 2.HTML基本結構標簽總結 1.基本語法概述 html是由尖括號包圍的,列如: html 。 html標簽通常是成對出現(xiàn)的,列如:html和/html,我們稱為 雙標簽 。標簽對里的第一個標簽是開始標

    2024年01月16日
    瀏覽(25)
  • 猿創(chuàng)征文|ZooKeeper(偽)集群搭建

    猿創(chuàng)征文|ZooKeeper(偽)集群搭建

    前言:zookeeper作為一款分布式協(xié)調中間件,其重要性不言而喻,因此需要保證其高可用性。所以一般都會搭建zookeeper集群,今天葉秋帶領大家在一臺服務器上搭建偽集群。 目錄 1、 搭建要求 2、 準備工作 3、 配置集群 ?4 啟動集群 ?5 模擬集群異常 1、 搭建要求 真實的集群是

    2024年02月01日
    瀏覽(30)
  • 猿創(chuàng)征文| redis基本數(shù)據類型

    猿創(chuàng)征文| redis基本數(shù)據類型

    ??個人主頁:不斷前進的皮卡丘 ??博客描述:夢想也許遙不可及,但重要的是追夢的過程,用博客記錄自己的成長,記錄自己一步一步向上攀登的印記 ??個人專欄:微服務專欄 ??redis常見的操作命令:http://www.redis.cn/commands.html 命令 功能 keys * 查看當前庫的所有key exists key 判斷

    2023年04月08日
    瀏覽(18)
  • 以太坊是什么?|猿創(chuàng)征文

    以太坊是什么?|猿創(chuàng)征文

    以太坊是一個可編程、可視化、更易用的區(qū)塊鏈,它允許任何人編寫智能合約和發(fā)行代幣。 在以太坊(Ethereum)出現(xiàn)之前,各種區(qū)塊鏈應用的功能非常有限,例如,比特幣和其他加密貨幣都只是純粹的數(shù)字貨幣。 以太坊(Ethereum)創(chuàng)始人Vitalik Buterin將以太坊(Ethereum)設想為開發(fā)人員

    2024年02月02日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領取紅包

二維碼2

領紅包