用户断开连接检测(即“在线状态”)守护进程

时间:2010-08-13 21:19:50

标签: ruby-on-rails tcp

摘要:是否有一个守护程序,当用户通过TCP连接/断开连接时会进行回发,或者编写一个是一个好主意?

详细信息: 有很多基于此的问题;但我相信这是一个不同的“扭曲”。我们正在编写一个Ruby on Rails Web应用程序,我们希望能够判断用户是“在线”还是“离线”,其中以下定义适用:

  • “online” - 用户的浏览器已打开,并与我们的某个服务器保持TCP连接。
  • “离线” - 用户的浏览器不再连接到我们的某个服务器。

我们所想的是一种方便的方法是运行一个完全独立的“在线状态”服务器,我们的每个用户都将连接到这个服务器(只需一次):

  • 当与“在线状态”服务器建立连接时,它将回发到我们的实际RoR站点并让它知道“此用户刚刚登录”。
  • 当连接从“在线状态”服务器丢失时,它将回发到我们的实际RoR站点并让它知道“此用户刚刚注销”。

这种方法似乎是合理的,并且使事情非常模块化(例如,在线状态服务器将非常简单,这很好)。我们可以编写这个在线状态服务器,但有以下问题:

  1. 我们没有考虑上述架构的任何具体问题?
  2. 那里有守护进程或应用程序吗?为什么要重新发明轮子,如果已经写好了?
  3. 是否有提供此功能的推送服务器(即它维护与用户的连接,但是当用户连接或断开连接时,它会回发或向Web服务器上游发送通知?)

1 个答案:

答案 0 :(得分:0)

这是您设想的用户会在他们的系统上安装的东西吗?

如果您正在寻找基于浏览器的系统,WebSockets可能是您使用Socket.IO http://socket.io/之类的唯一选择。

作为此项目的一部分提供的node.js套接字服务器可以在github上找到:http://github.com/LearnBoost/Socket.IO-node

Node.js是一个很好的平台,专为这个问题域而设计,并且有许多用于节点的WebSocket服务器。

除非您的应用程序完全基于ajax并使用单个父页面,否则您需要创建一个包含应用程序包装的套接字的持久父框架,因为每次用户单击链接时页面都会卸载并重新加载,从而导致从状态服务器断开连接并重新连接。