xiaonanln / goworld

Scalable Distributed Game Server Engine with Hot Swapping in Golang
Apache License 2.0
2.53k stars 450 forks source link

請教分布式的一些問題 #91

Closed fnaith closed 4 years ago

fnaith commented 4 years ago

覺得這種架構挺精實的,很想導入現有專案,所以有些問題想請教。

  1. 在這個架構中不同的Game指的就是不同款遊戲,這樣理解對嗎?

  2. 在這個架構中Space可以理解成是一個遊戲房間嗎?

  3. goworld-chatroom-demo 中的 SendChat 呼叫的是 SendChat_Client 嗎? 怎麼註冊的?

  4. entity 可以藉由 space 屬性對同一個 space 中的其他 entity 做廣播。那能廣播通知給所有同一個 game 的 entity 嗎?

  5. 如果想啟動多個server / 掛ngnix跨機器 的話,有跨server的溝通方案嗎?

還請作者指點。

xiaonanln commented 4 years ago
  1. 在這個架構中不同的Game指的就是不同款遊戲,這樣理解對嗎?

不同的Game是指不同的进程。Game进程是负责进行游戏逻辑处理的,都属于同一个游戏。多个Game的目的是为了把游戏的计算压力分到多个进程。

  1. 在這個架構中Space可以理解成是一個遊戲房間嗎?

可以。需要注意的的是Space和它里面的所有Entity都是在同一个Game进程里。

  1. goworld-chatroom-demo 中的 SendChat 呼叫的是 SendChat_Client 嗎? 怎麼註冊的?

是的。这个注册过程是服务端自动的。

  1. entity 可以藉由 space 屬性對同一個 space 中的其他 entity 做廣播。那能廣播通知給所有同一個 game 的 entity 嗎?

同一个Space里的所有Entity都在同一个进程,所以他们相互之间不需要进行通信,直接调用其他Entity的函数即可。所以如果你需要广播只要遍历Space里的所有Entity然后调用函数即可。

  1. 如果想啟動多個server / 掛ngnix跨機器 的話,有跨server的溝通方案嗎?

只要设置好配置文件goworld.ini,然后启动多个Game, Dispatcher, Gate进程,他们之间就会自动相互连接形成一个集群。不需要Nginx。

fnaith commented 4 years ago

感謝您的回覆!很詳細啊,只有第5點goworld.ini的部分目前還懵懵懂懂,會再研究範例。