NodeJs實(shí)現(xiàn)跨域WebSocket即時(shí)通訊加強(qiáng)版
Socket.io
原生WebSocket API使用起來不太方便,我們使用Socket.io,它很好地封裝了webSocket接口,提供了更簡單、靈活的接口,也對不支持webSocket的瀏覽器提供了向下兼容。
- 服務(wù)端代碼
- 根據(jù)不同客戶端傳來的消息存儲一下 不同的對象
- 需要安裝 npm i socket.io --save
- 下載 socket.io.js
nodejs 代碼
const socket = require("socket.io");
const http = require('http');
// 創(chuàng)建服務(wù)
const server = http.createServer((req,res)=>{
// 允許所有跨域請求
res.setHeader('Access-Control-Allow-Origin', '*');
req.writeHead(200,{'Content-Type':'text/html'})
res.end('')
}).listen(8001)
let pad = null,pc = null , padReady = false , pcReady = false;
// 連接socket.io
socket.listen(server).on('connection',(conn)=>{
conn.on('message',(str)=>{
if(str==="Pad"){
pad = conn;
padReady = true;
conn.send('連接成功');
}
if(str==="PC"){
pc = conn;
pcReady = true;
}
if(padReady&&pcReady){
if(str==='PC') str='我是PC界面'
pc.send(str);
}
})
conn.on("disconnection",(code, reason) => {
console.log("關(guān)閉連接")
});
})pad.html 代碼
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.kuang {
text-align: center;
margin-top: 200px;
}
#mess {
text-align: center
}
.value {
width: 200px;
height: 200px;
border: 1px solid;
text-align: center;
line-height: 200px;
display: inline-block;
}
</style>
</head>
<body>
<div id="mess">正在連接...</div>
<div class="kuang">
<div class="value" id="value1">aaaaaaa</div>
<div class="value" id="value2">bbbbbbb</div>
<div class="value" id="value3">ccccccc</div>
</div>
<script src="./js/socket.io.js"></script>
<script>
// 跨域地址
const socket = io('192.168.1.115:8001')
socket.on('connect', () => {
// 連接成功
socket.send('Pad')
// 監(jiān)聽連接
socket.on('message', (msg) => {
document.getElementById('mess').innerHTML=msg
// console.log(msg)
})
// 關(guān)閉連接
socket.on('disconnect', () => {
})
})
document.querySelector(".kuang").onclick = (e)=> {
socket.send(e.target.innerHTML);
}
</script>
</body>
</html>pc.html 代碼
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.kuang {
text-align: center;
margin-top: 200px;
}
#mess {
text-align: center
}
</style>
</head>
<body>
<div id="mess"></div>
<script src="./js/socket.io.js"></script>
<script>
var mess = document.getElementById("mess");
// 跨域地址
// TODO: 這里注意一下 不能寫127.0.0.1 或者localhost 不然其他客戶端訪問不到
const socket = io('192.168.1.115:8001')
socket.on('connect', () => {
// 連接成功
socket.send('PC')
// 監(jiān)聽連接
socket.on('message', (msg) => {
mess.innerHTML = msg
// console.log(msg)
})
// 關(guān)閉連接
socket.on('disconnect', () => {
})
})
</script>
</body>
</html>以上就是NodeJs 【加強(qiáng)版】實(shí)現(xiàn)跨域WebSocket 即時(shí)通訊的詳細(xì)內(nèi)容,更多關(guān)于NodeJs跨域WebSocket即時(shí)通訊的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
運(yùn)行Node.js的IIS擴(kuò)展iisnode安裝配置筆記
這篇文章主要介紹了運(yùn)行Node.js的IIS擴(kuò)展iisnode安裝配置筆記,iisnode的擴(kuò)展可以把Node.js程序托管到IIS,托管之后也意味著可以使用IIS里面的各種功能,需要的朋友可以參考下2015-03-03
參考EventEmitter實(shí)現(xiàn)完整訂閱發(fā)布功能函數(shù)
這篇文章主要為大家介紹了參考EventEmitter實(shí)現(xiàn)完整訂閱發(fā)布功能函數(shù)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02
Node實(shí)戰(zhàn)之不同環(huán)境下配置文件使用教程
這篇文章主要給大家介紹了關(guān)于Node實(shí)戰(zhàn)之不同環(huán)境下配置文件使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01
Node使用Puppeteer監(jiān)聽并打印網(wǎng)頁的接口請求
Puppeteer 是一個(gè) Node 庫,它提供了高級的 API 來通過 DevTools 協(xié)議控制 Chrome 或 Chromium,本文我們就來看看如何使用Puppeteer監(jiān)聽并打印網(wǎng)頁的接口請求吧2025-04-04
詳解nodejs express下使用redis管理session
本篇文章主要介紹了詳解nodejs express下使用redis管理session ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04
nodejs子進(jìn)程child_process和cluster模塊深入解析
本文從node的單線程單進(jìn)程的理解觸發(fā),介紹了child_process模塊和cluster模塊,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
Windows上安裝Node-RED的實(shí)現(xiàn)
Node-RED是一個(gè)用于物聯(lián)網(wǎng)編程的工具,提供了一個(gè)基于瀏覽器的編程環(huán)境和豐富的節(jié)點(diǎn)類型,本文就來介紹一下Windows上安裝Node-RED的實(shí)現(xiàn),感興趣的可以了解一下2025-02-02
防止Node.js中錯(cuò)誤導(dǎo)致進(jìn)程阻塞的辦法
Node.js我們用到非常的多了,如果我們開發(fā)不當(dāng)可能因錯(cuò)誤導(dǎo)致進(jìn)程阻塞問題,對于進(jìn)程阻塞問題一直是個(gè)頭痛的事情,今天我們一起來看一篇關(guān)于Node.js防止錯(cuò)誤導(dǎo)致的進(jìn)程阻塞示例,下面一起來看看。2016-08-08

