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);