【问题标题】:Gorilla websocket connections when running multiple instances of the Go application运行 Go 应用程序的多个实例时的 Gorilla websocket 连接
【发布时间】:2015-09-18 18:10:14
【问题描述】:

为了保存 Gorilla websocket 连接,我可以这样做,其中键可能是 userId。

connections := make(map[int]*connection)

我正在使用一个叫做 supervisord 的东西

http://supervisord.org/

这是一个过程控制系统,因此我能够运行 go 应用程序 在后台作为守护进程。似乎正在生成多个实例。

如果我将其设为全局变量,这些实例是否知道如何访问相同的连接变量?

var connections map[int]*connection

还是会有问题?

此外,由于 map 不是线程安全的,我是否应该创建一个结构并添加 sync.RWMutex 并在检查密钥是否存在或从其中删除密钥之前执行 RLock()/Lock() 和 RUnlock()/Unlock()地图?

【问题讨论】:

    标签: go


    【解决方案1】:

    首先,这些不是进程而是线程,所以它们确实会共享相同的全局状态。 htop shows threads as if they were processes.

    当您需要对地图进行并发访问时,您需要对其进行同步。您确实可以使用互斥锁来做到这一点。

    【讨论】:

    • 谢谢!如果我对多台服务器进行负载平衡怎么办?我将如何解决保存 gorilla websocket 连接的问题,以便所有服务器都能够访问它?
    • @Aiden 你必须序列化连接。我不认为这是可能的。你必须重新考虑你的设计
    • 一种方法是粘性会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    相关资源
    最近更新 更多