【发布时间】:2015-11-30 17:35:59
【问题描述】:
我在开始处理nodejs 时犯了一个错误,因为我没有使用Redis 或Memcache 或其他内存存储系统。现在,重写所有内容以在这些 API 中容纳和关联我的代码为时已晚。
但是,我最近才发现分叉流程及其益处;特别是因为我正在开发游戏服务器。
我遇到的问题是:The memory is not shared between cores in nodejs.. 直到我找到了一个名为 Amensia 的 TCP 内存共享模块。
说了这么多,我有一些关于nodejs 和tcp 的问题:
1) maximum size of a TCP packet 大约是 64k,所以在使用这个模块时我只能共享最大 64k 的数据?
2) 我使用全局 GAMES 和 users 对象来存储玩家数据。当玩家在地图中移动(x,y 位置)和其他操作时,这些对象会更新。通过 TCP 发送所有这些数据会导致瓶颈吗?
【问题讨论】:
-
共享>这个模块意味着将数据复制到不同的进程。那是你想要的吗?此外,我认为将您的存储/获取机制抽象为能够使用 Redis/Memcached/etc 不会太复杂......
-
好点.. 我刚才在想这个。我会说不,因为这些临时对象可以保存数百个玩家数据,并且将它们扔在 TCP 协议周围只是自找麻烦,对吗?也许 Redis/Memcache 是我必须要做的……只是,超过 20k 行,它将成为一个 PITA。
-
可能存储/获取代码将是 100 行。我强烈推荐 Redis
-
@NiCkNewman 我是否正确地告诉了您大多数进程在同一个本地主机上运行?如果是,那么通过使用 ZeroMQ /
inproc://传输类来避免 TCP 开销并让您通过智能(可扩展)正式通信模式处理“讨论”可能是有意义的。我来自低延迟角落,所以在这个方向上有点变形,低内存占用和每纳秒计数,如果您的游戏环境有其他优先级和/或操作系统功能不允许使用这种方法,那么抱歉:o )