You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JS发送最小字节请求并通过PHP接收极小量传输数据

解决方案

方案1:轻量HTTP优化(无socket开发经验优先选)

无需修改底层通信逻辑,仅通过优化请求方式即可将总请求体积压缩到100字节以内,远低于常规Ajax/Fetch的500字节开销:

  • 前端使用Image对象发起GET请求,相比fetch/Ajax会自动减少大量非必要的请求头
  • 传输的1字节数据直接放在URL参数中,无需使用请求体
  • 服务端返回204 No Content响应,砍掉所有非必要响应头,无响应体开销

前端代码

// payload为你要传输的1字节数据
const payload = 'x';
new Image().src = `/receive.php?d=${encodeURIComponent(payload)}`;

PHP后端代码(receive.php)

<?php
// 移除所有默认生成的响应头
header_remove();
// 返回204无内容状态码,无需返回任何响应数据
http_response_code(204);

// 读取传输的1字节数据
$receivedData = $_GET['d'] ?? '';
// 此处编写你的业务处理逻辑

exit;

方案2:WebSocket(极致最小传输体积)

如果需要极致的单包体积,可使用WebSocket长连接,握手完成后单次发送1字节数据的总传输开销仅为3字节左右(2字节帧头+1字节 payload),完全满足最小字节传输需求。
无需自己手写底层socket逻辑,使用PHP的Workerman框架即可快速搭建服务端:

  1. 先通过composer安装Workerman:composer require workerman/workerman
  2. 编写WebSocket服务端代码

前端代码

// 仅需建立一次连接,后续可多次发送数据
const ws = new WebSocket('ws://你的服务端IP:2346');
ws.onopen = () => {
    // 连接建立后直接发送1字节数据
    ws.send('x');
    // 不需要保持连接可直接关闭,需要复用则保留连接
    ws.close();
};

PHP服务端代码(ws_server.php)

<?php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';

// 监听WebSocket 2346端口
$wsWorker = new Worker('websocket://0.0.0.0:2346');
// 单进程即可满足需求
$wsWorker->count = 1;
// 收到客户端消息时触发
$wsWorker->onMessage = function($connection, $data) {
    // $data即为前端发送的1字节数据,此处编写业务处理逻辑
    // 无需返回数据可不做任何响应
};

Worker::runAll();

服务端启动命令:php ws_server.php start -d(后台运行)

补充说明

  • 方案1可配合Nginx配置进一步移除冗余请求头,还能再压缩10~30字节的请求体积
  • 方案2需要在服务器安全组/防火墙开放对应WebSocket端口(示例中为2346),服务端需用PHP CLI模式运行,不能用php-fpm模式

内容的提问来源于stack exchange,提问作者Simon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:15:07