切换主题
配置说明
本文对齐源码 model/config.go
与 model/mq_config.go
,提供所有可用配置键的说明与示例。
顶层结构
yaml
server: # 通用服务器配置(端口、名称等)
log: # 通用日志配置(级别等)
nacos: # 可选,服务发现与配置中心
websocket: # WebSocket 服务配置
mq: # 集群模式下消息队列配置
websocket
yaml
websocket:
max-connections: 10000 # 最大连接数(0 表示不限制)
max-message-size: 1048576 # 最大消息字节数(示例 1MB)
pong-timeout: "60s" # 响应超时(收到心跳或PONG刷新时限)
heartbeat-content: "heartbeat" # 心跳文本:匹配仅刷新超时,不写入MQ
allowed-origins: # 允许的来源域名列表
- "*" # 示例:允许所有来源(生产建议精确域名)
cluster-enabled: true # 是否启用集群模式
verify-uri: "http://127.0.0.1:8080/demo/websocket/getSession" # 鉴权接口(可填 lb://service/path)
verify-timeout: "30s" # 鉴权接口超时
slow-client-strategy: drop # 慢客户端处理:drop(丢弃消息) 或 disconnect(断开连接)
send-queue-size: 256 # 发送队列长度
accept-client-message: true # 是否接收客户端上行并写入MQ
temp-verify-enabled: true # 是否启用临时验证
temp-verify-uri: "http://127.0.0.1:8080/demo/temp-token/verify" # 临时验证接口
temp-max-connection-time: "60s" # 临时链接最大连接时间
字段对齐源码结构体 WebSocketConfig
:
max-connections
→ 最大连接数max-message-size
→ 单条消息最大字节数pong-timeout
→ PONG/心跳后允许未响应的时间窗口allowed-origins
→ 来源域白名单cluster-enabled
→ 开启后通过 MQ 做跨实例推送verify-uri
→ 鉴权 HTTP 地址,返回体需包含userId
verify-timeout
→ 鉴权请求超时slow-client-strategy
→ 慢客户端策略send-queue-size
→ 每连接发送队列长度accept-client-message
→ 是否接收上行并写入 MQ 的 client-routing-key/客户端主题heartbeat-content
→ 仅刷新超时不入 MQ 的心跳文本temp-verify-enabled
→ 是否启用临时验证(临时链接)temp-verify-uri
→ 临时验证 HTTP 地址temp-max-connection-time
→ 临时链接最大连接时间窗口
mq
当 cluster-enabled: true
时必须正确配置 MQ。支持 kafka
与 rabbitmq
。
通用
yaml
mq:
type: kafka # 或 rabbitmq
kafka: {}
rabbitmq: {}
Kafka
yaml
mq:
type: kafka
kafka:
brokers: ["192.168.3.181:9092"] # broker地址列表
topic: "websocket" # 服务端广播主题
client-topic: "websocket-client" # 客户端上行主题
group-id: "websocket-consumer" # 消费者组ID
broadcast: true # true=每实例唯一组,实现全体广播
producer:
acks: all # all, 1, 0
retries: 3
batch-size: 16384
linger-ms: 5
buffer-memory: 33554432
consumer:
auto-commit: true
auto-offset-reset: earliest # earliest 或 latest
session-timeout-ms: 30000
heartbeat-interval-ms: 3000
对应结构体:KafkaConfig
、KafkaProducerConfig
、KafkaConsumerConfig
。
RabbitMQ
yaml
mq:
type: rabbitmq
rabbitmq:
url: amqp://wueasy:1QAZ2wsx@192.168.3.181:5672/
exchange: websocket
routing-key: ws.broadcast # 服务端广播路由键
client-routing-key: ws.client # 客户端上行路由键
queue: "" # 队列名称;留空可用唯一安全队列
exchange-type: direct # direct, fanout, topic
durable: true
auto-delete: false
queue-durable: true
queue-auto-delete: false
delivery-mode: 1 # 1非持久, 2持久
priority: 0
expiration: "" # 过期时间
对应结构体:RabbitMQConfig
。
完整示例(RabbitMQ)
yaml
server:
port: 8080
name: websocket
log:
level: info
websocket:
max-connections: 10000
max-message-size: 1048576
pong-timeout: "60s"
heartbeat-content: "heartbeat"
allowed-origins: ["*"]
cluster-enabled: true
verify-uri: "http://127.0.0.1:8080/demo/websocket/getSession"
verify-timeout: "30s"
slow-client-strategy: drop
send-queue-size: 256
accept-client-message: true
temp-verify-enabled: true
temp-verify-uri: "http://127.0.0.1:8080/demo/temp-token/verify"
temp-max-connection-time: "60s"
mq:
type: rabbitmq
rabbitmq:
url: amqp://wueasy:1QAZ2wsx@192.168.3.181:5672/
exchange: websocket
routing-key: ws.broadcast
client-routing-key: ws.client
queue: ""
exchange-type: direct
durable: true
auto-delete: false
queue-durable: true
queue-auto-delete: false
delivery-mode: 1
priority: 0
expiration: ""
完整示例(Kafka)
yaml
server:
port: 9811
name: websocket
log:
level: info
websocket:
cluster-enabled: true
accept-client-message: true
max-connections: 10000
max-message-size: 1048576
pong-timeout: "60s"
heartbeat-content: "heartbeat"
verify-uri: "http://127.0.0.1:8080/demo/websocket/getSession"
verify-timeout: "30s"
temp-verify-enabled: true
temp-verify-uri: "http://127.0.0.1:8080/demo/temp-token/verify"
temp-max-connection-time: "60s"
allowed-origins:
- "*"
mq:
type: "kafka"
kafka:
brokers: ["192.168.3.181:9092"]
topic: "websocket"
client-topic: "websocket-client"
group-id: "websocket-consumer"
broadcast: true
producer:
acks: "all"
retries: 3
batch-size: 16384
linger-ms: 5
buffer-memory: 33554432
consumer:
auto-commit: true
auto-offset-reset: "earliest"
session-timeout-ms: 30000
heartbeat-interval-ms: 3000
返回体与消息格式
- 鉴权返回(示例):
{ "code": 200, "data": { "userId": "1001" } }
- 推送请求体:
targetType
:all
|user
|temp_user
|channel
target
: 目标用户ID或频道data
: 文本消息
结构体对齐:WebSocketMessage
。
配置建议
- 生产环境确保
allowed-origins
精确到域名,避免*
- 根据业务消息大小合理设置
max-message-size
- 慢客户端建议使用
disconnect
保持系统可预测性 - 集群下优先 RabbitMQ 的直连模型,Kafka 适合日志型广播