运行Go应用程序的多个实例时,Gorilla websocket连接

时间:2015-09-18 10:06:51

标签: go

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

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

我正在使用名为supervisord的东西

http://supervisord.org/

这是一个过程控制系统,以便我能够运行go应用程序 在后台作为守护进程。看起来好像有几个实例正在催生。

enter image description here

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

var connections map[int]*connection

或者会有问题吗?

此外,由于map不是线程安全的,我应该创建一个struct并添加sync.RWMutex并执行RLock()/ Lock()和RUnlock()/ Unlock(),然后再检查一个键是否存在或者删除一个来自地图的关键?

1 个答案:

答案 0 :(得分:1)

首先,那些不是进程而是线程,因此它们确实将共享相同的全局状态。 htop shows threads as if they were processes

每当您需要并发访问地图时,您需要同步它。您确实可以使用互斥锁执行此操作。