利用webSocket實現瀏覽器中多個標簽頁之間的通信


webSoket用來實現雙向通信,客戶端和服務端實時通信。

webSoket優點和缺點:

    優點:對於前端來說,使用簡單,功能靈活,如果部署了webSocket服務器,可以實現實時通信。

    缺點:需要服務端技術的支持,如果websocket數據量比較大的話,會嚴重消耗服務器的資源。

例子:

1  websocket服務器端搭建

//初始化一個node項目:node init,一路確認就可以,文件夾會自動創建一個package.json文件
// 下載ws文件    npm i -save ws

//獲得WebSocketServerr類型
var WebSocketServer = require('ws').Server;
//創建WebSocketServer對象實例,監聽指定端口
var wss = new WebSocketServer({ port:8080 });
//創建保存所有已連接到服務器的客戶端對象的數組
var clients=[];

//為服務器添加connection事件監聽,當有客戶端連接到服務端時,立刻將客戶端對象保存進數組中
wss.on('connection', function (client) {
      console.log("一個客戶端連接到服務器")
      if(clients.indexOf(client)===-1){//如果是首次連接
            clients.push(client) //就將當前連接保存到數組備用
            console.log("有"+clients.length+"客戶端在線")
       //為每個client對象綁定message事件,當某個客戶端發來消息時,自動觸發
       client.on('message',function(msg){
             console.log('收到消息'+msg)
            //遍歷clients數組中每個其他客戶端對象,並發送消息給其他客戶端
            for(var c of clients){
                  if(c!=client){//把消息發給別人
                        c.send(msg);
                  }
            }
       })

 }
})

2 用來發送信息的標簽頁

<!DOCTYPE html>
<html lang="en">
<head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
</head>
<body>
            <!-- 這個頁面是用來發送信息的 -->
            <input type="text" id="msg">
            <button id="send">發送</button>
      <script>
                //建立到服務端webSoket連接
               var ws=new WebSocket("ws://localhost:8080")      
               send.onclick=function(){

                     if(msg.value.trim()!=''){//如果msg輸入框內容不是空的
                     ws.send(msg.value.trim())  //將msg輸入框中的內容發送給服務器
                     
                     }
               }               
      </script>
</body>
</html>

 

3 接收消息的標簽頁

<!DOCTYPE html>
<html lang="en">
<head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
</head>
<body>
            <!-- 這個標簽頁是用來接收信息的 -->
      <h1 >收到的消息:<p id="recMsg"></p></h1>
      <script>
            //建立到服務端webSoket連接
             var ws=new WebSocket("ws://localhost:8080") 
             //當連接被打開時,注冊接收消息的處理函數
             
             ws.onopen=function(event) {
            //當有消息發過來時,就將消息放到顯示元素上
                   ws.onmessage=function(event) {
                   recMsg.innerHTML=event.data;  
                   }   
  
            }
             
      </script>
</body>
</html>

 

轉自:https://blog.csdn.net/aweo960421621/article/details/101973580

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM