gpt4 book ai didi

spring - Websockets + Spring Boot + Kubernetes

转载 作者:行者123 更新时间:2023-12-02 11:29:33 26 4
gpt4 key购买 nike

我正在创建一个 Facebook 多人游戏,目前正在评估我的技术堆栈。

我的游戏需要使用 websockets,我想使用 Spring Boot。现在,我找不到 websocket 服务器是否可以在 Kubernetes 中正常工作的信息?例如,如果我在 Kubernetes pod 中部署了 5 个服务器实例,则浏览器中加载的游戏客户端和 Kubernetes 中的服务器之间的 websocket 负载平衡/转发将正常工作,是否还有其他工作可以启用它?每个 pod/服务器将是无状态的,每个玩家的当前游戏信息将从 redis 或其他一些内存数据库存储/读取。

如果这不起作用,我该如何解决它并仍然使用 Kubernetes?也许只为 websockets 添加一个 rabbitmq 实例到堆栈中?

最佳答案

处理此问题的适当方法是使用“粘性 session ”。这是根据 cookie 的设置将用户固定到特定 pod 的地方。

以下是配置 Ingress 的示例使用粘性 session 的资源对象:

#
# https://github.com/kubernetes/ingress-nginx/tree/master/docs/examples/affinity/cookie
#
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginx-test-sticky
annotations:
kubernetes.io/ingress.class: "nginx"
ingress.kubernetes.io/affinity: "cookie"
ingress.kubernetes.io/session-cookie-name: "route"
ingress.kubernetes.io/session-cookie-hash: "sha1"
spec:
rules:
- host: $HOST
http:
paths:
- path: /
backend:
serviceName: $SERVICE_NAME
servicePort: $SERVICE_PORT

话虽如此,处理这个问题的正确方法是使用消息代理或支持集群的 websocket 实现,例如 socketcluster ( https://socketcluster.io )。

关于spring - Websockets + Spring Boot + Kubernetes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686122/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com