在我正在制作的应用中,用户始终是“游戏”的一部分。我想设置一个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实例,并跟踪哪些连接属于哪些游戏?
答案 0 :(得分:3)
我必须为每场比赛开一个新的goroutine,而且我不太了解他们的表现特征,知道这是否可扩展
消防,Go调度程序可以有效地处理数千甚至数百万个goroutines。
Go标准库中的默认net/http
服务器为每个客户端生成一个goroutine。
请记住,一旦他们完成工作,就要从你的goroutines回来。否则,你最终会遇到很多过时的事情。
我最好创建1个socket.io实例,并跟踪哪些连接属于哪些游戏?
我没有参与该项目,但如果它遵循Go的#em>"得到完成" 哲学,那么它不应该物。您可以通过分析这两种方法找出更好的方法。