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

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

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

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

http://supervisord.org/

这是一个过程控制系统,因此我能够在后台运行 go 应用程序作为守护程序。看起来正在产生几个实例。

http://img.mukewang.com/6188da450001d0c805790121.jpg

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

var connections map[int]*connection

还是会出问题?

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


慕妹3242003
浏览 261回答 1
1回答

沧海一幻觉

首先,那些不是进程而是线程,所以它们确实会共享相同的全局状态。htop 将线程显示为进程。每当您需要对地图进行并发访问时,都需要对其进行同步。你确实可以用互斥锁来做到这一点。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go