0

在我正在制作的应用程序中,用户始终是“游戏”的一部分。我想设置一个 socket.io 服务器来与游戏中的用户进行通信。我打算使用http://godoc.org/github.com/madari/go-socket.io go-socket.io,它定义了newSocketIO创建新socketio实例的函数。

与其创建一个 socketio 实例,我认为可以创建一个将游戏 id 映射到 socket.io 实例的映射,并配置它们以便它们侦听代表游戏 id 的 url。

这样,我就可以使用广播和广播除外等方法向单个游戏中的所有玩家广播。但是,我必须为每个游戏启动一个新的 goroutine,而且我对它们的性能特征了解不多,无法知道这是否可扩展,因为单个 socketio 实例的请求率将非常低,大约 1/在高峰时间秒,但在其他时间连接可能会空闲数十秒(除了心跳,以及可能由 socket.io 协议指定的其他通信)。

创建 1 个 socket.io 实例并跟踪哪些连接属于哪些游戏会更好吗?

4

1 回答 1

3

我必须为每场比赛启动一个新的 goroutine,而且我对它们的性能特征了解得不够多,不知道这是否可扩展

开火吧,Go 调度程序旨在有效处理数千甚至数百万个 goroutine。

例如,Go 标准库中的默认net/http服务器为每个客户端生成一个 goroutine。

只要记住在 goroutine 完成工作后返回即可。否则你会得到很多陈旧的。

创建 1 个 socket.io 实例并跟踪哪些连接属于哪些游戏会更好吗?

我没有参与该项目,但如果它遵循 Go 的“完成任务”的理念,那么它应该没关系。不过,您可以通过分析这两种方法来找出更好的方法。

于 2013-10-16T18:26:34.957 回答