这个用例的推荐解决方案/技术是什么?

时间:2012-03-27 10:24:40

标签: performance optimization

我正在建立一个网站,提供各种主题的一对一辅导。教练是通过网络完成的(视频通话,文件上传,这样的事情),其中一个最重要的事情是客户按分钟付费。我的问题如下:我怎么知道教练会议何时结束(这样我才能正确地向客户收费)?

我打算将教练会话大致存储在数据库中:

  coach_id:integer
  client_id:integer
  created_at:datetime
  updated_at:datetime
  in_progress:boolean

在会话结束时,我将在updated_at和created_at之间做一些区别,并获得会话的长度。

以下是我看到的潜在问题:

  • 教练失去互联网接入=>在这种情况下,客户端将按下网站上的一个按钮,该按钮将通知我们会话有问题,会话的updated_at将更新,in_progress将设置为false }

  • 客户端失去互联网访问权限=>相同的工作流程就好像教练失去了互联网访问

  • 两者都失去了互联网访问权限=>这是最棘手的案例。我不知道如何通知服务器该会话应被视为已完成。我正在考虑通过推送来实现它,并且拥有客户端的浏览器,并且教练的浏览器每分钟都会更新服务器。最糟糕的情况是,错误会导致与账单相差1分钟,这是可以接受的。缺点是我认为这可能会给服务器带来很大的负担,而且一旦我们有很多用户,我不知道这是否仍然是一个可行的解决方案。

您如何看待这种方法?如果重要,应用程序将建立在Rails 3.2上。

1 个答案:

答案 0 :(得分:1)

为什么不考虑HTML5 EventSourceWebSockets作为检测连接/丢失连接的可能方法?

至少在.NET中(我猜在所有服务器环境中)都可以看到客户端是否仍然连接(tcp明智)。 EventSource / WebSockets可以帮助您建立一个始终打开的连接(与短时间连接的请求/响应连接相反),您可以监视它是否仍在运行/打开。

因此,解决方案需要在websocket服务器上实现。