我正在创建一个基本上与第三方Chat Streaming API(基于Socket)的多个连接的应用程序。
它的工作方式是 - 每个用户在我的应用上都有一个帐户,在第三方应用上有另一个帐户。他为第三方聊天应用程序提供了访问令牌,我连接到第三方API以进行聊天。这种情况发生在数百名用户身上。
我需要为每个用户创建一个套接字连接池并运行并行线程。我正在使用python库(用于该API),并且能够为单个用户实现实时源。如何在Python或NodeJS中实现异步套接字连接池?我在EC2上有一个Linux微实例,我需要为1000个用户运行这个应用程序。
我正在探索Redis + Tornado来实现这一点。还有更好的选择吗?
答案 0 :(得分:0)
这将是混乱的,还有几件事需要考虑。
multiprocessing
。 <强>解决方案强>
当您的应用程序绝对需要实时时,我会建议用于服务器 - 客户端交互的websockets。
然后从您的客户端请求启动一个进程,使用python中的multiprocessing
侦听流API上的\ polls。因此,您基本上将为每个客户创建一个单独的流程。
现在,要使WebSocketHandler
和Background API Streamer相互交互,您可以使用观察者模式(https://en.wikipedia.org/wiki/Observer_pattern)通知WebSocket您已从API接收数据。
确保为每个客户端分配一个唯一的ID,并确保在使用websockets时仅将数据发布到目标客户端。
修改强>
网络:
还有关于龙卷风的问题。它是一个很好的轻量级框架,可以运行几个用户,可能是1000.但是我建议看看Django,因为它可以让你在生成代码方面更有效率,而且社区还有很多工具可供社区使用。随着时间的推移已经发展。
数据库:
如果你需要一个非常快的no-sql db,Red.is是个不错的选择,也看看mongodb。如果你需要一个多区域数据库,我会建议使用Cassandra或CouchDB,因为分区节点。下面的图片可能有助于您更好地决定使用哪个数据库。