npm install ws 后 require 仍失败的常见原因有三:项目根目录错误、未保存到 dependencies、包管理器不匹配(如 pnpm 用户误用 npm);此外 new websocket.server() 的 port 和 server 参数不可混用,客户端连接需确保 node 进程运行、端口未被防火墙拦截、url 协议为 ws:// 而非 http://,且 message 回调中 data 默认为 buffer 需 tostring() 转换。

ws 模块不是 Node.js 内置模块,必须显式安装才能用;不装就 require('ws') 会直接报 Error: Cannot find module 'ws'。
npm install ws 后为什么 require 还失败?
常见原因有三个:
-
package.json所在目录不对:确保你在项目根目录(即package.json所在路径)下执行npm install ws - 安装了但没保存到
dependencies:建议加--save(或默认行为已改的 npm v7+ 可省略),避免部署时漏装 - 用了 pnpm/yarn 但误敲 npm 命令:检查当前包管理器,pnpm 用户应运行
pnpm add ws,否则node_modules结构不兼容
new WebSocket.Server() 的 port 和 server 参数不能混用
你只能二选一:
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 单独指定
port:适合纯 WebSocket 服务,比如new WebSocket.Server({ port: 8080 }),它会自动创建 HTTP 服务器 - 传入已有
server:适合和express共存,必须先用http.createServer(app)创建实例,再传进去,否则会报TypeError: Invalid argument, expected http.Server - 同时写两个参数会导致静默失败或端口冲突——
ws不报错但监听不到连接
客户端连不上 ws://localhost:xxx?检查这三件事
90% 的“连接被拒绝”问题出在这儿:
- Node 进程没在跑:执行
node server.js后,终端必须保持运行状态,关掉就断连 - 防火墙/杀毒软件拦截了端口:临时关闭试试,或换一个公认安全端口如
3001、8081 - 浏览器地址栏输的是
http://而不是ws://:WebSocket 客户端必须用new WebSocket('ws://localhost:8080'),用http://会触发 CORS 或协议错误
message 回调里收到的 data 默认是 Buffer
除非你明确设置 ws.binaryType = 'arraybuffer' 或手动转码,否则 ws.on('message', data => { ... }) 中的 data 是 Buffer 类型,不是字符串:
- 直接
console.log(data)看起来像乱码,其实是十六进制输出 - 正确解法:用
data.toString()转字符串,或JSON.parse(data.toString())解析 JSON - 如果发的是二进制(如图片帧),才需要保留
Buffer并用Uint8Array处理
ws 启动后没意识到它不输出“Server listening…”这类提示——它只在 connection 事件触发时才打日志。如果你没连客户端,控制台就是空的,很容易误以为没跑起来。










