Python或Node中的异步套接字连接

时间:2015-08-14 06:45:41

标签: python node.js sockets asynchronous tornado

我正在创建一个基本上与第三方Chat Streaming API(基于Socket)的多个连接的应用程序。

它的工作方式是 - 每个用户在我的应用上都有一个帐户,在第三方应用上有另一个帐户。他为第三方聊天应用程序提供了访问令牌,我连接到第三方API以进行聊天。这种情况发生在数百名用户身上。

我需要为每个用户创建一个套接字连接池并运行并行线程。我正在使用python库(用于该API),并且能够为单个用户实现实时源。如何在Python或NodeJS中实现异步套接字连接池?我在EC2上有一个Linux微实例,我需要为1000个用户运行这个应用程序。

我正在探索Redis + Tornado来实现这一点。还有更好的选择吗?

1 个答案:

答案 0 :(得分:0)

这将是混乱的,还有几件事需要考虑。

  1. 如果您打算使用多个线程,请记住您只能在操作系统允许的情况下为每个CPU运行这么多,而是转到multiprocessing
  2. 如果您与长轮询进程异步,则会阻止其他客户端处理请求。
  3. <强>解决方案

    当您的应用程序绝对需要实时时,我会建议用于服务器 - 客户端交互的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,因为分区节点。下面的图片可能有助于您更好地决定使用哪个数据库。

    enter image description here