当前位置:首页 > 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
分享给朋友:

相关文章

vue实现串口通信

vue实现串口通信

Vue 实现串口通信的方法 在 Vue 项目中实现串口通信,通常需要借助浏览器提供的 Web Serial API 或第三方库。以下是几种常见的实现方式: 使用 Web Serial API…

vue.js实现轮播

vue.js实现轮播

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

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…