下面给你一份 前端连接 TCP 服务并接收数据的完整实现步骤 + 可直接运行的代码示例。
⚠️注意:浏览器不能直接使用 TCP Socket(安全限制),所以必须通过:
浏览器前端 ↔ WebSocket ↔ WebSocket-转-TCP 服务器 ↔ 真实 TCP 服务
下面给你完整流程、架构、代码(Node.js WebSocket→TCP 转发器 + 前端 JS)。
✅ 一、实现方式架构图
[浏览器前端] -- WebSocket --> [Node.js 转发器] -- TCP Socket --> [TCP 服务端]
浏览器只能连 WebSocket
Node.js 使用 net 模块连 TCP
Node 通过 WebSocket 把 TCP 数据转发给前端
✅ 二、实现步骤(非常清晰)
步骤 1:创建一个 Node.js WebSocket → TCP 转发服务
用于把 WebSocket 客户端(浏览器)转成 TCP socket。
📌 安装依赖
npm install ws
📌 server.js
// server.js
const WebSocket = require('ws');
const net = require('net');
// WebSocket 服务端
const wss = new WebSocket.Server({ port: 8080 });
console.log('WebSocket Server started on ws://localhost:8080');
wss.on('connection', (ws) => {
console.log('Browser connected');
// 每个浏览器连接 → 创建一个 TCP 连接
const tcpClient = new net.Socket();
tcpClient.connect(5000, '127.0.0.1', () => {
console.log('Connected to TCP server');
});
// TCP → WebSocket(推给前端)
tcpClient.on('data', (data) => {
ws.send(data.toString());
});
// TCP 关闭
tcpClient.on('close', () => {
console.log('TCP connection closed');
ws.close();
});
tcpClient.on('error', (err) => {
console.error('TCP error:', err);
ws.close();
});
// WebSocket → TCP(前端发的数据写到 TCP)
ws.on('message', (msg) => {
tcpClient.write(msg);
});
ws.on('close', () => {
console.log('Browser disconnected');
tcpClient.destroy();
});
});
运行服务器
node server.js
✅ 步骤 2:浏览器前端连接 WebSocket,间接收 TCP 数据
📌 index.html
<!DOCTYPE html>
<html>
<body>
<h2>前端连接 TCP 的演示</h2>
<div id="log"></div>
<script>
const ws = new WebSocket("ws://localhost:8080");
ws.onopen = () => {
console.log("已连接 Node WebSocket");
ws.send("hello tcp"); // 给 TCP 服务发点测试数据
};
ws.onmessage = (event) => {
const log = document.getElementById("log");
log.innerHTML += `<p>收到数据:${event.data}</p>`;
console.log("TCP 消息 → WebSocket → 前端:", event.data);
};
ws.onclose = () => {
console.log("连接关闭");
};
</script>
</body>
</html>
只要 TCP 服务端发送数据 → 前端就能马上收到。
✅ 步骤 3:准备你的 TCP 服务端测试(可选)
如果你需要快速测试,可用这个 5000 端口的小 TCP server:
// tcp-server.js
const net = require('net');
const server = net.createServer((socket) => {
console.log('Client connected');
socket.write("欢迎来自TCP的第一条消息\n");
socket.on('data', (data) => {
console.log("收到前端发来的:", data.toString());
socket.write("已收到你发的:" + data.toString());
});
});
server.listen(5000, () => {
console.log('TCP server on port 5000');
});
运行:
node tcp-server.js
✅ 三、效果:
- 浏览器打开 index.html
- 自动连接 ws://localhost:8080
- Node.js 自动连接 TCP 服务 127.0.0.1:5000
- TCP → Node → WebSocket → 前端
前端就能看到 TCP 服务发来的消息了
🎁 四、可扩展功能(你需要我可以继续写)
我还可以帮你扩展:
✓ 自动重连 TCP
✓ 多客户端互相隔离
✓ 实现 JSON 协议封装
✓ 服务心跳机制
✓ 不同 TCP 服务的负载均衡
✓ 搭建生产环境版本(pm2 + nginx 反代)
发表回复