首页
/ frp WebSocket穿透:实现实时Web应用

frp WebSocket穿透:实现实时Web应用

2026-02-05 05:46:18作者:田桥桑Industrious

什么是WebSocket穿透?

WebSocket是一种在单个TCP连接上进行全双工通信的协议,广泛用于实时Web应用如在线聊天、实时通知和协作工具。当这些应用部署在内网环境时,需要通过内网穿透工具将WebSocket服务暴露到公网。frp(Fast Reverse Proxy)提供了对WebSocket协议的原生支持,能够安全高效地实现WebSocket流量的中转。

frp的WebSocket穿透功能通过在客户端与服务端之间建立持久连接,将公网WebSocket请求转发至内网服务。其核心实现位于pkg/util/net/websocket.go,该模块定义了WebSocket监听器和连接处理逻辑。

工作原理

frp的WebSocket穿透基于标准HTTP升级机制实现,工作流程如下:

  1. 协议检测:服务端通过识别特定HTTP请求前缀(GET /~!frp)判断是否为WebSocket连接请求,相关代码位于server/service.go
  2. 连接升级:符合条件的请求会被升级为WebSocket连接,由WebsocketListener处理
  3. 数据转发:建立的WebSocket连接将作为数据通道,传输客户端与内网服务间的双向数据

frp架构图

frp整体架构,WebSocket穿透是TCP转发的特殊实现

配置步骤

1. 服务端配置

修改frps配置文件conf/frps.toml,确保WebSocket支持已启用(默认开启):

[common]
bind_port = 7000  # 基础通信端口,WebSocket会共享此端口

2. 客户端配置

创建WebSocket代理配置,指定协议类型为websocket

[common]
server_addr = "x.x.x.x"  # 公网服务器IP
server_port = 7000       # 与服务端bind_port一致
protocol = "websocket"   # 指定使用WebSocket协议

[ws_proxy]
type = "tcp"             # WebSocket本质是TCP连接
local_ip = "127.0.0.1"   # 内网WebSocket服务IP
local_port = 8080        # 内网WebSocket服务端口
remote_port = 8081       # 公网访问端口

3. 启动服务

# 启动服务端
./frps -c conf/frps.toml

# 启动客户端
./frpc -c conf/frpc.toml

安全增强

对于生产环境,建议启用WebSocket安全连接(WSS):

[common]
protocol = "wss"                # 使用加密的WebSocket
tls_enable = true
tls_cert_file = "/path/to/cert.pem"
tls_key_file = "/path/to/key.pem"

WSS配置会自动启用TLS加密,相关逻辑在client/connector.go中处理,确保TLS握手在WebSocket升级前完成。

验证方法

可使用wscat工具测试WebSocket连接:

# 安装wscat
npm install -g wscat

# 连接穿透后的WebSocket服务
wscat -c ws://x.x.x.x:8081

若连接成功,输入消息将被转发至内网WebSocket服务并收到响应。frp控制台也会显示连接状态,可通过Dashboard监控实时连接情况。

常见问题

连接不稳定

  • 检查网络环境,WebSocket对网络抖动较敏感
  • 尝试增加心跳间隔:heartbeat_interval = 30
  • 启用自动重连:autoreconnect = true

端口冲突

确保服务端remote_port未被占用,或使用vhost_http_port配置虚拟主机模式:

[ws_proxy]
type = "http"
local_port = 8080
custom_domains = ["ws.example.com"]

应用场景

  1. 实时协作工具:如在线文档协作、多人画板
  2. 即时通讯:客服系统、聊天室应用
  3. 实时监控:设备状态监控、日志实时推送
  4. 游戏服务:轻量级游戏实时数据同步

通过frp的WebSocket穿透,这些应用可以轻松部署在内网环境,同时向公网用户提供低延迟的实时服务。

总结

frp提供了可靠的WebSocket穿透方案,通过简单配置即可将内网WebSocket服务安全暴露到公网。其核心优势包括:

  • 原生支持WebSocket协议,无需额外插件
  • 支持WSS加密,保障数据传输安全
  • 与frp其他功能无缝集成,如流量控制、身份验证
  • 完善的错误处理和重连机制,确保连接稳定性

如需了解更多细节,可查阅:

登录后查看全文
热门项目推荐
相关项目推荐