我想使用node.js和socket.io来显示当前有多少用户在我的网站上查看某个页面,方法是向node.js发送带有页面地址(即/ homepage或/ events)的消息。服务器,然后读取/写入具有地址名称的文件(即homepage.txt或events.txt),获取当前计数并添加1然后将其写回文件,然后在断开连接时执行相同操作,而是删除1和保存它。
这是我到目前为止的代码,目前不包括用于测试的fs函数,服务器文件和客户端文件也在同一目录中
客户:
<?php
$url = $_SERVER["REQUEST_URI"];
?>
<body style="overflow: hidden;" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="/node_modules/socket.io/lib/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost:5000');
socket.on('connected', function (data) {
$("#log").append('Connected!<br />');
$("#log").append(data + "<br />");
socket.emit('viewing', { page: '<?php echo $url; ?>' });
socket.on('disconnected', function(data) {
$("#log").append("User Disconnected" + "<br />");
});
});
</script>
<div id='log' style='height: 100%; border: 1px solid black;'></div>
服务器:
var io = require('socket.io').listen(5000);
var connected_users = 0;
io.sockets.on('connection', function(socket) {
connected_users++;
console.log("User Connected!");
socket.emit("connected", { message: "Users Online: " + connected_users + "!" });
socket.on('viewing', function(data){
console.log("User Is Viewing: " + data);
});
socket.on('disconnect', function(){
connected_users--;
console.log("User Disconnected!");
socket.emit("disconnected", { message: "Users Online: " + connected_users + "!" });
});
});
但由于某种原因,这似乎并不起作用,所有服务器都说是“info - socket.io started”,当用户连接到客户端页面时没有别的
关于我可能做错的任何提示/想法。
提前谢谢 - 温妮
答案 0 :(得分:2)
此外,您似乎还包括服务器端socket.io代码。正确的脚本标记是这样的:
<script src="http://localhost:5000/socket.io/socket.io.js"></script>
答案 1 :(得分:1)
在您编写的专栏中,代码中存在一些问题。
socket.on('viewing', function(data){
console.log("User Is Viewing: " + data);//it should be data.page
});
此外,当disconnect
事件发生在服务器端时,用户已经离开页面并且套接字已关闭,因此您无法向客户端发送任何内容。解决方案是从客户端发送disconnected
事件。有些事件表明用户离开了某个页面,例如onbeforeunload
事件。