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

IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket

這篇具有很好參考價值的文章主要介紹了IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket,Web前端框架,Java學習路線,微服務(wù)架構(gòu)設(shè)計,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

??IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陳寒??
  • ?博客主頁:IT·陳寒的博客
  • ??該系列文章專欄:Java面試技巧
  • ??其他專欄:Java學習路線 Java面試技巧 Java實戰(zhàn)項目 AIGC人工智能 數(shù)據(jù)結(jié)構(gòu)學習
  • ??文章作者技術(shù)和水平有限,如果文中出現(xiàn)錯誤,希望大家能指正??
  • ?? 歡迎大家關(guān)注! ??

1. 引言

即時通訊(Instant Messaging,簡稱IM)已經(jīng)成為現(xiàn)代應(yīng)用中不可或缺的一部分。為了實現(xiàn)實時的消息傳遞,開發(fā)者需要選擇合適的通信技術(shù)。本文將介紹四種常見的IM通信技術(shù):短輪詢、長輪詢、Server-Sent Events(SSE)、WebSocket,并通過簡單的代碼示例來演示它們的實現(xiàn)方式。

IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket,Web前端框架,Java學習路線,微服務(wù)架構(gòu)設(shè)計,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

2. 短輪詢(Short Polling)

2.1 原理

短輪詢是一種簡單的實時通信方法,客戶端通過定時向服務(wù)器發(fā)送請求,服務(wù)器在每個請求中回復(fù)是否有新消息。這種方式的缺點是頻繁的HTTP請求可能會導(dǎo)致服務(wù)器和帶寬資源的浪費。

IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket,Web前端框架,Java學習路線,微服務(wù)架構(gòu)設(shè)計,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

2.2 代碼示例

2.2.1 服務(wù)器端(Node.js)
const express = require('express');
const app = express();

app.get('/poll', (req, res) => {
  // 模擬有新消息的情況
  const hasNewMessage = Math.random() < 0.5;

  if (hasNewMessage) {
    res.send('New message');
  } else {
    res.status(204).send(); // No Content
  }
});

const port = 3000;
app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
2.2.2 客戶端(HTML + JavaScript)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Short Polling Example</title>
</head>
<body>
  <div id="messages"></div>

  <script>
    function poll() {
      fetch('/poll')
        .then(response => {
          if (!response.ok) {
            throw new Error('Network response was not ok');
          }
          return response.text();
        })
        .then(data => {
          if (data) {
            document.getElementById('messages').innerText = data;
          }
          poll(); // 繼續(xù)下一次輪詢
        })
        .catch(error => {
          console.error('Error during polling:', error);
          poll(); // 出錯時也要繼續(xù)下一次輪詢
        });
    }

    // 初始啟動輪詢
    poll();
  </script>
</body>
</html>

3. 長輪詢(Long Polling)

3.1 原理

長輪詢是對短輪詢的改進,客戶端發(fā)送請求后,服務(wù)器只有在有新消息到達時才會立即回復(fù),否則會等待一段時間再回復(fù)。這種方式降低了不必要的請求次數(shù),但仍然存在一些延遲。

IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket,Web前端框架,Java學習路線,微服務(wù)架構(gòu)設(shè)計,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

3.2 代碼示例

3.2.1 服務(wù)器端(Node.js)
const express = require('express');
const app = express();

app.get('/long-poll', (req, res) => {
  // 模擬有新消息的情況
  const hasNewMessage = Math.random() < 0.5;

  if (hasNewMessage) {
    res.send('New message');
  } else {
    // 模擬長輪詢,延遲5秒鐘再回復(fù)
    setTimeout(() => {
      res.send('No new message after waiting');
    }, 5000);
  }
});

const port = 3000;
app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
3.2.2 客戶端(HTML + JavaScript)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Long Polling Example</title>
</head>
<body>
  <div id="messages"></div>

  <script>
    function longPoll() {
      fetch('/long-poll')
        .then(response => {
          if (!response.ok) {
            throw new Error('Network response was not ok');
          }
          return response.text();
        })
        .then(data => {
          document.getElementById('messages').innerText = data;
          longPoll(); // 繼續(xù)下一次輪詢
        })
        .catch(error => {
          console.error('Error during long polling:', error);
          longPoll(); // 出錯時也要繼續(xù)下一次輪詢
        });
    }

    // 初始啟動長輪詢
    longPoll();
  </script>
</body>
</html>

4. Server-Sent Events(SSE)

4.1 原理

Server-Sent Events(SSE)是一種基于單向通信的技術(shù),允許服務(wù)器向客戶端推送事件。與短輪詢和長輪詢不同,SSE 使用了持久連接,客戶端只需通過 EventSource API 監(jiān)聽服務(wù)器發(fā)送的事件。

IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket,Web前端框架,Java學習路線,微服務(wù)架構(gòu)設(shè)計,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

4.2 代碼示例

4.2.1 服務(wù)器端(Node.js)
const express = require('express');
const app = express();

app.get('/sse', (req, res) => {
  // 設(shè)置 SSE 頭信息
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');
  res.flushHeaders();

  // 模擬定時向客戶端推送消息
  const intervalId = setInterval(() => {
    const hasNewMessage = Math.random() < 0.5;
    if (hasNewMessage) {
      res.write(`data: New message\n\n`);
    }
  }, 1000);

  // 當客戶端斷開連接時清除定時器
  req.on('close', () => {
    clearInterval(intervalId);
    res.end();
  });
});

const port = 3000;
app.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
4.2.2 客戶端(HTML + JavaScript)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>SSE Example</title>
</head>
<body>
  <div id="messages"></div>

  <script>
    const eventSource = new EventSource('/sse');

    eventSource.onmessage = (event) => {
      document.getElementById('messages').innerText = event.data;
    };

    eventSource.onerror = (error) => {
      console.error('Error during SSE:', error);
      eventSource.close();
    };
  </script>
</body>
</html>

5. WebSocket

5.1 原理

WebSocket 是一種雙向通信協(xié)議,允許服務(wù)器主動向客戶端推送消息,同時也允許客戶端向服務(wù)器發(fā)送消息。相對于之前介紹的技術(shù),WebSocket 提供了更低的延遲和更高的效率。

IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket,Web前端框架,Java學習路線,微服務(wù)架構(gòu)設(shè)計,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)

5.2 代碼示例

5.2.1 服務(wù)器端(Node.js,使用 ws 庫)

首先,確保你已經(jīng)安裝了 ws 庫:

npm install ws

然后,創(chuàng)建 WebSocket 服務(wù)器:

const express = require('express');
const http = require('http');
const WebSocket = require('ws');

const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
  // 模擬定時向客戶端推送消息
  const intervalId = setInterval(() => {
    const hasNewMessage = Math.random() < 0.5;
    if (hasNewMessage) {
      ws.send('New message');
    }
  }, 1000);

  // 當客戶端斷開連接時清除定時器
  ws.on('close', () => {
    clearInterval(intervalId);
  });
});

const port = 3000;
server.listen(port, () => {
  console.log(`Server is running on http://localhost:${port}`);
});
5.2.2 客戶端(HTML + JavaScript)
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>WebSocket Example</title>
</head>
<body>
  <div id="messages"></div>

  <script>
    const socket = new WebSocket('ws://localhost:3000');

    socket.onmessage = (event) => {
      document.getElementById('messages').innerText = event.data;
    };

    socket.onclose = (event) => {
      console.error('WebSocket closed:', event);
    };

    socket.onerror = (error) => {
      console.error('WebSocket error:', error);
    };
  </script>
</body>
</html>

6. 拓展與分析

6.1 比較與選擇

  • 短輪詢和長輪詢: 簡單易實現(xiàn),但頻繁的HTTP請求可能導(dǎo)致資源浪費和延遲。適用于不要求實時性很高的場景。

  • SSE: 提供了更好的實時性,但仍然基于HTTP,無法處理雙向通信。適用于服務(wù)器向客戶端推送信息的場景。

  • WebSocket: 實現(xiàn)了雙向通信,低延遲高效。適用于需要實時雙向通信的場景,如在線聊天、實時協(xié)作等。

6.2 安全性考慮

在使用這些通信技術(shù)時,安全性是一個需要考慮的因素。WebSocket 提供了一些安全性的標準,而 HTTP 請求則可能需要額外的安全層,如 SSL/TLS。

6.3 適用場景

  • 短輪詢和長輪詢: 適用于實時性要求不高的場景,例如論壇的消息提醒。

  • SSE: 適用于服務(wù)器向客戶端單向推送信息的場景,如實時新聞、股票行情等。

  • WebSocket: 適用于實時雙向通信的場景,如在線聊天、實時協(xié)作等。

6.4 未來發(fā)展趨勢

隨著技術(shù)的不斷發(fā)展,WebSocket 的應(yīng)用范圍會逐漸擴大,尤其是在實時性要求較高的應(yīng)用中。然而,其他技術(shù)仍然有其適用的場景,因此在選擇時需根據(jù)具體需求權(quán)衡各種因素。

7. 總結(jié)

IM通信技術(shù)是現(xiàn)代應(yīng)用中至關(guān)重要的一部分,開發(fā)者可以根據(jù)實際需求選擇不同的通信技術(shù)。本文介紹了短輪詢、長輪詢、Server-Sent Events(SSE)、WebSocket 這四種通信技術(shù)的原理和實現(xiàn)方式,并通過簡單的代碼示例演示了它們的應(yīng)用。在選擇合適的通信技術(shù)時,需要根據(jù)實際場景的需求、安全性、性能等因素進行綜合考慮。隨著技術(shù)的不斷發(fā)展,IM通信技術(shù)也會迎來更多的創(chuàng)新和改進,為開發(fā)者提供更多選擇。


??結(jié)尾 ?? 感謝您的支持和鼓勵! ????
??您可能感興趣的內(nèi)容:

  • 【Java面試技巧】Java面試八股文 - 掌握面試必備知識(目錄篇)
  • 【Java學習路線】2023年完整版Java學習路線圖
  • 【AIGC人工智能】Chat GPT是什么,初學者怎么使用Chat GPT,需要注意些什么
  • 【Java實戰(zhàn)項目】SpringBoot+SSM實戰(zhàn):打造高效便捷的企業(yè)級Java外賣訂購系統(tǒng)
  • 【數(shù)據(jù)結(jié)構(gòu)學習】從零起步:學習數(shù)據(jù)結(jié)構(gòu)的完整路徑

IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket,Web前端框架,Java學習路線,微服務(wù)架構(gòu)設(shè)計,websocket,網(wǎng)絡(luò)協(xié)議,網(wǎng)絡(luò)文章來源地址http://www.zghlxwxcb.cn/news/detail-751758.html

到了這里,關(guān)于IM通信技術(shù)快速入門:短輪詢、長輪詢、SSE、WebSocket的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 什么是 HTTP 長輪詢?

    什么是 HTTP 長輪詢?

    Web 應(yīng)用程序最初是圍繞客戶端/服務(wù)器模型開發(fā)的,其中 Web 客戶端始終是事務(wù)的發(fā)起者,向服務(wù)器請求數(shù)據(jù)。因此,沒有任何機制可以讓服務(wù)器在沒有客戶端先發(fā)出請求的情況下獨立地向客戶端發(fā)送或推送數(shù)據(jù)。 為了克服這個缺陷,Web 應(yīng)用程序開發(fā)人員可以實施一種稱為

    2024年02月15日
    瀏覽(22)
  • Tomcat長輪詢原理與源碼解析

    Tomcat長輪詢原理與源碼解析

    系列文章目錄和關(guān)于我 最近在看工作使用到的配置中心原理,發(fā)現(xiàn)大多數(shù)配置中心在推和拉模型上做的選擇出奇的一致選擇了 基于長輪詢的拉模型 基于拉模型的客戶端輪詢的方案 客戶端通過輪詢方式發(fā)現(xiàn)服務(wù)端的配置變更事件。輪詢的頻率決定了動態(tài)配置獲取的實時性。

    2023年04月16日
    瀏覽(21)
  • 淺談衛(wèi)星通信技術(shù)

    淺談衛(wèi)星通信技術(shù)

    目錄 1.衛(wèi)星的概念 2.衛(wèi)星的具體作用 3.利用衛(wèi)星進行通信的優(yōu)勢 4.衛(wèi)星通信帶來的技術(shù)變革 ????????衛(wèi)星是指在地球軌道上運行的天體或人造物體。一般來說,我們所說的衛(wèi)星主要指人造衛(wèi)星,它是由人類設(shè)計、制造并送入軌道的人造宇宙飛行器。 ????????人造衛(wèi)星通

    2024年02月11日
    瀏覽(20)
  • 物聯(lián)網(wǎng)通信技術(shù)

    物聯(lián)網(wǎng)通信技術(shù)

    UWB:超寬帶無線通信技術(shù)(UWB)是一種無載波通信技術(shù),UWB不使用載波,而是使用短的能量脈沖序列,并通過正交頻分調(diào)制或直接排序?qū)⒚}沖擴展到一個頻率范圍內(nèi)。 NFC:全稱是Near Field? Communication,即“近場通信”,也叫“近距離無線通信”。 ARQ:自動重傳請求(Automati

    2024年02月09日
    瀏覽(19)
  • AsyncContext優(yōu)雅實現(xiàn)HTTP長輪詢接口

    接到一個需求,實現(xiàn)方案時需要提供一個HTTP接口,接口需要hold住5-8秒,輪詢查詢數(shù)據(jù)庫,一旦數(shù)據(jù)庫中值有變化,取出變化的值進行處理,處理完成后返回響應(yīng)。這不就是長輪詢嗎,如何優(yōu)雅的實現(xiàn)呢? 在這之前先簡單介紹下長連接和短連接 HTTP長鏈接(Keep-Alive) 概念:

    2024年02月09日
    瀏覽(17)
  • RocketMQ的長輪詢(Long Polling)實現(xiàn)分析

    目錄 前言 長輪詢 1.實現(xiàn)步驟 1.1客戶端輪詢發(fā)送請求 1.2服務(wù)端處理數(shù)據(jù) 1.3客戶端接收數(shù)據(jù) 2.實現(xiàn)實例 RocketMQ長輪詢 1.PullMessage服務(wù) 2.PullMessageProcessor服務(wù) 3.PullCallback回調(diào) 總結(jié) 消息隊列一般在消費端都會提供push和pull兩種模式,RocketMQ同樣實現(xiàn)了這兩種模式,分別提供了兩個實

    2024年02月07日
    瀏覽(22)
  • 世界前沿技術(shù)發(fā)展報告2023《世界信息技術(shù)發(fā)展報告》(六)網(wǎng)絡(luò)與通信技術(shù)

    世界前沿技術(shù)發(fā)展報告2023《世界信息技術(shù)發(fā)展報告》(六)網(wǎng)絡(luò)與通信技術(shù)

    資料來自:《世界前沿技術(shù)發(fā)展報告2023》和網(wǎng)絡(luò) 隨著滿足智慧交互、沉浸式拓展現(xiàn)實(Extended Reality, XR)全息通信、數(shù)字孿生等新興技術(shù)的超高速率傳輸需求,新一代通信技術(shù)成為全球研究熱點。伴隨著5G在全球范圍內(nèi)的陸續(xù)應(yīng)用,全球通信強國正開啟對下一代網(wǎng)絡(luò)技術(shù)6G的研發(fā)

    2024年02月07日
    瀏覽(30)
  • Web即時通信技術(shù)——WebRTC

    Web即時通信技術(shù)——WebRTC

    WebRTC(Web Real-Time Communication)是一個開放的項目,旨在在網(wǎng)頁端提供實時的音頻、視頻和數(shù)據(jù)通信,不需要插件或其他附加軟件。它是由Google主導(dǎo),并在Mozilla、W3C和IETF等組織的支持下開發(fā)。WebRTC的目標是使瀏覽器成為實時通信的強大平臺,支持點對點(peer-to-peer)通信。 官

    2024年01月24日
    瀏覽(21)
  • SpringBoot 集成 WebSocket 通信技術(shù)

    作者:禪與計算機程序設(shè)計藝術(shù) WebSocket 是一種基于 TCP 的協(xié)議,它提供雙向通信信道,可以實現(xiàn)瀏覽器和服務(wù)器端的全雙工通信。通過 WebSocket ,網(wǎng)頁應(yīng)用可以實時地接收服務(wù)端傳來的消息,并根據(jù)需要給予響應(yīng);也可以將用戶操作如鼠標拖動、鍵盤輸入等實時發(fā)送到服務(wù)端

    2024年02月07日
    瀏覽(27)
  • 無線網(wǎng)絡(luò)通信技術(shù)詳細介紹

    以下是對各類網(wǎng)絡(luò)各自常見和常用的通信技術(shù)進行簡單介紹。 一、無線廣域網(wǎng)(WWAN) 無線廣域網(wǎng)WWAN(Wireless Wide Area Networks)主要是為了滿足超出一個城市范圍的信息交流和網(wǎng)際接入需求,讓用戶可以和在遙遠地方的公眾或私人網(wǎng)絡(luò)建立無線連接。在無線廣域網(wǎng)的通信中一般要用

    2024年02月08日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包