【问题标题】:How can I check whether some specific user has an internet connection?如何检查某些特定用户是否有互联网连接?
【发布时间】:2017-01-18 17:35:25
【问题描述】:

我维护一个使用 Ruby on Rails 构建的系统。当特定用户没有互联网连接时,客户要求我阻止系统工作。

你会怎么做?

我需要检查特定计算机是否有互联网连接! 例如,如果我的电脑或你的电脑或我妈妈的电脑没有互联网连接!

【问题讨论】:

  • 您的问题不清楚。你想让你的 Rails 应用在看不到客户端时停止运行吗?
  • 我的 rails 应用程序在看不到客户端时无法运行。
  • @NicioBarretoSantos:如果您的 rails 在没有客户端时停止运行,其他客户端将无法连接(该应用程序不再工作)
  • 我不知道我是否清楚。我是巴西人,英语一点都不好。我会尝试.... 我需要检查特定计算机是否有互联网连接!例如,如果我的电脑或你的电脑或我妈妈的电脑没有互联网连接!
  • 尝试 ping 一个受欢迎的网站?基本上,只要尝试通过互联网做一些事情,看看它是否成功。

标签: javascript ruby-on-rails ruby


【解决方案1】:

这与 Ruby on Rails 无关。

此用户是否正在访问位于本地网络但无法访问外部 Internet 的站点?如果是这样,您可以在您的主页上使用before_filter 或某种方法来尝试 ping google.com 或 LAN 外的其他站点以检查 Internet。

【讨论】:

  • 听上去,他实际上希望Rails 应用程序根据一个特定的预定用户的连接状态以两种状态之一存在。他似乎正在为一家外卖餐厅实施一个外卖订单系统,用户可以使用表单提交食物订单,但前提是餐厅的计算机当前登录到显示它们的仪表板。这更有意义。
【解决方案2】:

使用Offline.js

  1. 在您的 vendor/assets/javascripts 中添加 offline.min.js 文件
  2. 在您的 app/assets/javascripts/application.js 中要求它为 //= require offline.min
  3. 在同一个 application.js 文件中添加以下代码

    $(document).ready(function() {
        Offline.check();
        Offline.on('up', function() {
            $('a.btn').removeClass('disabled');
        });
        Offline.on('down', function() {
            $('a.btn').addClass('disabled');
        });
    });
    

这与我的代码有关,我只是在连接断开时禁用所有按钮。

Offline.js 的默认行为会添加一个带有请等待消息的叠加层,直到互联网连接恢复。

我更喜欢以这种方式处理它,因为它可以提供更好的用户体验。禁用按钮是阻止用户工作的一种微妙方式。

【讨论】:

  • 这不是我正在寻找的。如果用户有连接或没有连接,Offline.js 会发出警报,我只想获得一个用户。我的应用程序的所有者需要访问互联网才能查看用户的请求(这是送餐)。因此,如果他没有互联网连接,他就无法检查请求。我需要确定他,所有者,是否有互联网连接!
  • @NicioBarretoSantos:如果应用程序托管在互联网的某个地方(例如 heroku),那么如果经理的计算机没有互联网连接,他将无法打开该应用程序。这不能解决你的问题吗?
  • 不!我有送货应用程序和管理员。这个想法是检查是否有人登录管理员,你知道吗?
【解决方案3】:

因此,澄清一下,您的 Rails 应用程序是供用户向特定用户发送送餐请求的——大概是准备和送餐的商店——并且您希望用户在以下情况下无法创建新的送餐请求店主/店主目前不在线?

实现这一点的最简单方法是拥有一个管理员仪表板区域,所有者可以在其中单击按钮以“打开商店”并允许新订单。那么,担心的是商店的连接会离线,导致客户永远不会收到订单。为了解决这个问题,您可以让每个客户订单以“未确认”状态开始;提交新订单时,会通知所有者,他可以单击一个按钮进行确认,让用户知道是的,他们的订单已被查看并正在制作中(然后可以从他们的信用卡中扣除,如果您有在线支付)。这可能是最可靠的解决方案,因为您真正想要的是确认人类已确认订单。

如果您确实想将其直接与在线状态相关联,那么您可以让管理仪表板页面定期检查它是否正在被查看。您可以使用 websockets 连接 see Action Cable introduced in Rails 5 来完成此操作。 Admin Dashboard 页面在登录时打开一个 websocket 连接;新连接事件设置accepting_orders = true。 websocket 断开连接事件设置accepting_orders = false,这将在它们的连接断开后不久发生(确保检查超时设置)。如果没有 websockets,你可能会有一个间隔发生的后台 HTTP 请求; x 秒后未收到该请求可能会导致 Rails 停止接受新订单。

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 2017-01-27
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多