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

如何在不使用Node.js的情况下用JavaScript实现WebSocket服务器?

适配共享服务器的JavaScript WebSocket聊天服务器实现方案

由于你的共享服务器无法运行Node.js,以下是几个纯JavaScript实现WebSocket服务器的可行路径:

1. 用Cloudflare Workers部署(推荐)

Cloudflare Workers是基于V8的无服务器JS运行环境,原生支持WebSocket,无需维护服务器,免费额度足够小型聊天应用使用。

核心代码示例

addEventListener('fetch', event => {
  const upgradeHeader = event.request.headers.get('Upgrade');
  if (!upgradeHeader || upgradeHeader !== 'websocket') {
    return event.respondWith(new Response('Expected WebSocket upgrade', { status: 400 }));
  }

  const [clientSocket, serverSocket] = Object.values(new WebSocketPair());
  serverSocket.accept();

  // 存储连接的客户端(可结合Cloudflare KV实现跨实例广播)
  const clients = new Set();
  clients.add(serverSocket);

  serverSocket.addEventListener('message', ({ data }) => {
    // 广播消息给所有连接的客户端
    clients.forEach(client => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(data);
      }
    });
  });

  serverSocket.addEventListener('close', () => clients.delete(serverSocket));

  return event.respondWith(new Response(null, {
    status: 101,
    webSocket: clientSocket,
  }));
});

部署后会获得一个Cloudflare提供的wss://地址,直接在前端代码中使用即可。

2. 共享服务器CGI + 轻量JS运行时(如QuickJS)

如果你的共享服务器支持CGI,且能安装轻量JS运行时(比如QuickJS),可以编写WebSocket服务器脚本,但需要手动实现WebSocket协议的握手、帧解析逻辑(包括掩码处理、帧类型判断等),这个方案复杂度较高,仅适合有协议基础的开发者。

3. 临时公共中继服务(过渡用)

如果暂时无法部署自己的服务器,可使用免费公共WebSocket中继服务临时测试:

let socket = new WebSocket('wss://echo.websocket.org');
socket.onmessage = (event) => console.log('收到消息:', event.data);

关键提示

  • 若要在共享服务器上部署,需确认服务器的反向代理(如Nginx)已开启WebSocket支持,否则长连接会被中断
  • 手动实现WebSocket协议细节极易出错,优先选择Cloudflare Workers这类封装好的无服务器方案

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:41:05