对于我当前的设置,我有一个使用 Tornado 的客户端服务器、一个独立的数据库服务器和另一个用于我的网站的独立服务器。
我正在考虑在同一系统上运行第二个客户端服务器进程(以利用其多个内核),并且我想在定位我的“客户端”连接到哪个服务器时获得一些建议。每个客户端可以有多个连接(实例)。
我已经研究过使用 memcached 来保存用户标识符列表并将它们链接到他们连接到的服务器,但这似乎不会很好地扩展(例如,有六位数的连接用户) .
我在数据库查找中看到了同样的问题。我已经尽可能地优化了我的服务器,没有进行微优化,我个人对此不以为然。
当前服务器方法:
连接时: 接受连接,每个 IP 的最大连接速率限制。将客户端实例附加到名为“clientList”的列表中。
来自客户端的数据: 每秒最大消息的速率限制。将数据附加到客户端工作队列。如果客户端有一个专用于它的工作队列的线程:return,它的工作将被当前线程咀嚼,否则为这个用户工作队列创建一个新线程,启动它。
TLDR: 我如何有效地存储客户端连接到的服务器以便将消息转发给该用户。