feat: 在线双人五子棋(Socket.IO + Vue3 + Canvas)
- 服务端权威状态机:落子校验、四方向五连判胜、悔棋请求、认输、离线判负、交换黑白再来一局 - 断线重连:resumeToken 凭证 + localStorage,刷新/锁屏自动回到原座位 - 移动端 Canvas 棋盘:DPR 适配、触摸容差吸附、最后一手标记、胜利连子高亮 - Docker 多阶段构建,非 root + 只读根文件系统 - k8s 清单:单副本 Recreate(内存态房态)、Ingress WebSocket 超时与粘性会话注释
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
# 部署前需要改两处:
|
||||
# 1. spec.ingressClassName —— 用 `kubectl get ingressclass` 确认集群里实际的 class 名
|
||||
# 2. spec.rules[].host 与 spec.tls[].hosts —— 换成你自己的域名
|
||||
#
|
||||
# 证书二选一:
|
||||
# A) cert-manager 自动签发:在 annotations 里加
|
||||
# cert-manager.io/cluster-issuer: <你的 ClusterIssuer 名>
|
||||
# B) 手动导入已有证书:
|
||||
# kubectl -n wuziqi create secret tls wuziqi-tls \
|
||||
# --cert=fullchain.pem --key=privkey.pem
|
||||
# 没有域名时删掉整段 spec.tls,并去掉 annotations 里的 force-ssl-redirect(若有),
|
||||
# 改为纯 HTTP 访问;Socket.IO 在 HTTP 下也能工作,但手机网络上不如 wss 稳定。
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: wuziqi
|
||||
namespace: wuziqi
|
||||
labels:
|
||||
app: wuziqi
|
||||
annotations:
|
||||
# —— Socket.IO 长连接的关键三项 ——
|
||||
# 默认 proxy-read-timeout 只有 60s,长连接会被 Ingress 直接掐断,
|
||||
# 表现为手机每隔一分钟掉线一次。心跳间隔 25s,这里放宽到 1 小时。
|
||||
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
|
||||
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
|
||||
# 关闭缓冲,避免事件被攒着不发导致落子延迟
|
||||
nginx.ingress.kubernetes.io/proxy-buffering: "off"
|
||||
# 显式声明 WebSocket Upgrade 的目标 Service
|
||||
nginx.ingress.kubernetes.io/websocket-services: "wuziqi"
|
||||
|
||||
# —— 会话亲和性 ——
|
||||
# 客户端 transports 为 [websocket, polling],WebSocket 不通时会回退到长轮询。
|
||||
# 长轮询的握手与后续请求必须落到同一 Pod,否则会话丢失。
|
||||
# replicas=1 时这几项是空操作,但一旦调大副本数就是必需的。
|
||||
nginx.ingress.kubernetes.io/affinity: "cookie"
|
||||
nginx.ingress.kubernetes.io/session-cookie-name: "wuziqi-affinity"
|
||||
nginx.ingress.kubernetes.io/session-cookie-max-age: "3600"
|
||||
nginx.ingress.kubernetes.io/session-cookie-samesite: "Lax"
|
||||
spec:
|
||||
ingressClassName: nginx
|
||||
tls:
|
||||
- hosts:
|
||||
- gomoku.example.com
|
||||
secretName: wuziqi-tls
|
||||
rules:
|
||||
- host: gomoku.example.com
|
||||
http:
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: wuziqi
|
||||
port:
|
||||
number: 80
|
||||
Reference in New Issue
Block a user