当前位置:首页 > JavaScript

js实现通信

2026-04-05 18:59:45JavaScript

JavaScript 实现通信的方法

JavaScript 提供了多种方式实现不同场景下的通信,包括前端与后端、前端组件间、跨域通信等。以下是常见方法:

XMLHttpRequest (XHR)

传统的前后端通信方式,通过创建 XMLHttpRequest 对象发送异步请求。

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

Fetch API

现代浏览器支持的更简洁的异步请求方式,基于 Promise 实现。

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

WebSocket

实现全双工实时通信,适用于聊天应用、实时数据推送等场景。

const socket = new WebSocket('wss://example.com/socket');
socket.onopen = () => socket.send('Hello Server!');
socket.onmessage = (event) => console.log('Received:', event.data);

PostMessage

跨窗口或跨域通信的安全方法,常用于 iframe 与父页面交互。

// 发送消息
window.parent.postMessage('Hello Parent!', 'https://parent-origin.com');

// 接收消息
window.addEventListener('message', (event) => {
  if (event.origin === 'https://trusted-origin.com') {
    console.log('Received:', event.data);
  }
});

EventEmitter 模式

通过自定义事件实现组件间通信,常见于前端框架或模块化开发。

class EventEmitter {
  constructor() {
    this.events = {};
  }
  on(event, listener) {
    (this.events[event] || (this.events[event] = [])).push(listener);
  }
  emit(event, ...args) {
    (this.events[event] || []).forEach(listener => listener(...args));
  }
}

const emitter = new EventEmitter();
emitter.on('message', (data) => console.log(data));
emitter.emit('message', 'Hello Event!');

BroadcastChannel

允许同源下的不同浏览器上下文(如多个标签页、iframe)通信。

const channel = new BroadcastChannel('app_channel');
channel.postMessage('Hello other tabs!');
channel.onmessage = (event) => console.log('Received:', event.data);

Server-Sent Events (SSE)

服务器单向推送数据到客户端,适用于实时通知等场景。

const eventSource = new EventSource('/sse-endpoint');
eventSource.onmessage = (event) => console.log('Update:', event.data);

WebRTC

点对点通信技术,适用于视频聊天、文件传输等场景。

js实现通信

// 示例:建立简单的 WebRTC 连接需结合信令服务器
const peerConnection = new RTCPeerConnection();
peerConnection.onicecandidate = (event) => {
  if (event.candidate) {
    // 发送 candidate 到对等端
  }
};

注意事项

  • 跨域通信需配置 CORS 或使用代理。
  • WebSocket 和 WebRTC 需要服务端支持。
  • 实时性要求高的场景优先考虑 WebSocket 或 SSE。
  • 组件间通信可根据框架特性选择(如 React 的 Context、Vue 的 Event Bus)。

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

相关文章

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 c…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…