当前位置:首页 > JavaScript

js实现通信

2026-03-14 00:50:53JavaScript

JavaScript 通信实现方式

JavaScript 提供了多种实现通信的方式,适用于不同场景需求,包括客户端与服务器、页面间、跨域等场景。

AJAX (XMLHttpRequest 和 Fetch API)

XMLHttpRequest 是传统的异步通信方式,现代开发推荐使用 Fetch API 更简洁高效。

// XMLHttpRequest 示例
const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://api.example.com/data');
xhr.onload = function() {
  if (xhr.status === 200) {
    console.log(xhr.response);
  }
};
xhr.send();

// Fetch API 示例
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data));

WebSocket

实现全双工通信,适用于实时应用如聊天室、在线游戏。

const socket = new WebSocket('wss://echo.websocket.org');
socket.onopen = () => socket.send('Hello Server');
socket.onmessage = event => console.log(event.data);

Server-Sent Events (SSE)

服务器单向推送技术,适用于实时通知场景。

const evtSource = new EventSource('/updates');
evtSource.onmessage = event => {
  console.log('New update:', event.data);
};

WebRTC

点对点通信技术,适合视频会议、文件传输。

// 建立连接示例
const pc = new RTCPeerConnection();
pc.onicecandidate = event => {
  if (event.candidate) {
    // 发送候选地址给对方
  }
};
pc.ondatachannel = event => {
  const channel = event.channel;
  channel.onmessage = event => console.log(event.data);
};

postMessage

跨窗口通信方法,适用于iframe/跨域场景。

// 父窗口发送
window.frames[0].postMessage('hello', 'https://child.example.com');

// 子窗口接收
window.addEventListener('message', event => {
  if (event.origin === 'https://parent.example.com') {
    console.log(event.data);
  }
});

Web Workers

后台线程通信,用于计算密集型任务。

// 主线程
const worker = new Worker('worker.js');
worker.postMessage('start');
worker.onmessage = event => console.log(event.data);

// worker.js
self.onmessage = event => {
  if (event.data === 'start') {
    self.postMessage('working');
  }
};

Broadcast Channel API

同源不同页面间广播通信。

const bc = new BroadcastChannel('app_channel');
bc.postMessage('User logged in');
bc.onmessage = event => console.log(event.data);

IndexedDB 共享数据

客户端数据库存储,可用于页面间共享数据。

const request = indexedDB.open('sharedDB');
request.onsuccess = event => {
  const db = event.target.result;
  const tx = db.transaction('store', 'readwrite');
  tx.objectStore('store').put('data', 'key');
};

跨文档通信 (Channel Messaging)

通过 MessageChannel 建立直接通信管道。

js实现通信

const channel = new MessageChannel();
port1 = channel.port1;
port2 = channel.port2;
port1.postMessage('hello');
port2.onmessage = event => console.log(event.data);

选择建议

  • 简单数据请求优先使用 Fetch API
  • 实时双向通信选择 WebSocket
  • 服务器推送通知使用 SSE
  • 跨窗口/域通信采用 postMessage
  • 高性能计算任务使用 Web Workers
  • 复杂客户端数据共享考虑 IndexedDB

每种技术都有其适用场景,需要根据具体需求选择最合适的通信方式。现代浏览器对这些技术都有良好支持,但生产环境使用时仍需考虑兼容性方案。

标签: 通信js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…