Javascript 如何获取当前打开给定网页的用户数

Javascript 如何获取当前打开给定网页的用户数,javascript,web-applications,websocket,long-polling,Javascript,Web Applications,Websocket,Long Polling,有没有一种简单有效的方法来计算打开某个网页的访问者数量 最终目标是做到这一点: 检查页面上有多少访问者,即在浏览器中打开页面的访问者 如果超过某个数字n,则显示一个按钮。第一个按下按钮的x访问者将进入另一个页面 只要有超过n的访问者,该按钮将继续显示。否则,按钮将消失 做这件事有什么诀窍吗?长时间投票?Websocket?越简单越好。你可以像你提到的那样使用Websocket,或者只使用简单的AJAX每100毫秒轮询一次服务器,直到Websocket没有关闭,或者直到服务器在500毫秒内没有收到

有没有一种简单有效的方法来计算打开某个网页的访问者数量

最终目标是做到这一点:

  • 检查页面上有多少访问者,即在浏览器中打开页面的访问者
  • 如果超过某个数字
    n
    ,则显示一个按钮。第一个按下按钮的
    x
    访问者将进入另一个页面
  • 只要有超过
    n
    的访问者,该按钮将继续显示。否则,按钮将消失

  • 做这件事有什么诀窍吗?长时间投票?Websocket?越简单越好。

    你可以像你提到的那样使用Websocket,或者只使用简单的AJAX每100毫秒轮询一次服务器,直到Websocket没有关闭,或者直到服务器在500毫秒内没有收到浏览器的响应,用户才可以使用AJAX“连接”

    只需根据页面和页面上的不同ip将所有连接到页面的用户添加到数据库中,并在特定页面上出现
    n
    条目时对其进行计数,然后向所有浏览器返回响应以显示按钮


    如果少于
    n
    ,只需发送一个响应来隐藏按钮。

    你可以像你提到的那样使用Websocket,或者只使用简单的AJAX每100毫秒轮询一次服务器,直到Websocket没有关闭,或者直到服务器在500毫秒内没有收到浏览器的响应,用户才“连接”使用AJAX

    只需根据页面和页面上的不同ip将所有连接到页面的用户添加到数据库中,并在特定页面上出现
    n
    条目时对其进行计数,然后向所有浏览器返回响应以显示按钮


    如果少于
    n
    只需发送响应以隐藏按钮。

    您的站点是静态的,然后使用

    如果您的站点是动态的,那么
    使用页面名将计数器保存到数据库中,您的站点是静态的,然后使用

    如果您的站点是动态的,那么
    使用页面名将计数器保存到数据库中

    使用WebSocket可以轻松完成此任务。下面是使用编写的必需应用程序代码(假设在新用户连接时执行检查)


    客户端(仅提供其他应用程序代码):


    如果您感兴趣,我可以向您发送整个工作应用程序[需要Maven]。Jetty或Tomcat可用作web应用程序容器。

    使用WebSocket可以轻松完成此任务。下面是使用编写的必需应用程序代码(假设在新用户连接时执行检查)


    客户端(仅提供其他应用程序代码):


    如果您感兴趣,我可以向您发送整个工作应用程序[需要Maven]。Jetty或Tomcat可以用作web应用程序容器。

    我认为这不是我想要的。我需要知道当前打开某个特定页面的用户数量,而不是访问该页面的用户数量。我认为这不是我想要的。我需要知道当前打开某个特定页面的用户数量,而不是访问该页面的用户数量。这种类型的功能称为用户状态。在Pusher,我们只有其他实时web技术可以以其他方式提供显示功能。这种类型的功能称为用户显示。在Pusher,我们有其他实时web技术,但可能以其他方式提供显示功能。
    @Component
    public class CountUsersConnectionListeners implements ConnectionStateListener<DefaultUser> {
    
      private static final int MAGIC_MAXIMUM_NUMBER_OF_USERS = 2;
    
      private int numberOfCurrentlyConnected;
    
      @Autowired
      private ConnectionCountClientClass connectionCountClientClass;
    
      @Override
      public void userConnected(DefaultUser defaultUser) {
        if (numberOfCurrentlyConnected > MAGIC_MAXIMUM_NUMBER_OF_USERS) {
          connectionCountClientClass.showButtonToNewUser(defaultUser);
          numberOfCurrentlyConnected++;
          return;
        }
    
        numberOfCurrentlyConnected++;
        if (numberOfCurrentlyConnected > MAGIC_MAXIMUM_NUMBER_OF_USERS) {
          connectionCountClientClass.showButton(true);
        }
      }
    
      @Override
      public void userDisconnected(DefaultUser defaultUser) {
        if (numberOfCurrentlyConnected <= MAGIC_MAXIMUM_NUMBER_OF_USERS) {
          numberOfCurrentlyConnected--;
          return;
        }
    
        numberOfCurrentlyConnected--;
        if (numberOfCurrentlyConnected <= MAGIC_MAXIMUM_NUMBER_OF_USERS) {
          connectionCountClientClass.hideButton(true);
        }
      }
    }
    
    @ClientActionClass
    @Component
    public class ConnectionCountClientClass {
    
      @ClientAction
      public SendCondition showButton(boolean show) {
        return AllUsersCondition.getInstance(); // this will send a message to all connected users
      }
    
      @ClientAction
      public SendCondition hideButton(boolean hide) {
        return AllUsersCondition.getInstance(); // this will send a message to all connected users
      }
    
      @ClientAction
      public DefaultUser showButtonToNewUser(DefaultUser defaultUser) {
        return defaultUser; // this will send a message only to the user given as parameter
      }
    }
    
    var sampleClientAction = {
      showButton: function() {
        alert("Show button!");
      },
      showButtonToNewUser: function() {
        alert("Show me button!");
      },
      hideButton: function() {
        alert("Hide button!");
      }
    };
    
    dataController.registerClientActionClass("ConnectionCountClientClass", sampleClientAction);