2013-01-13 65 views
0

我想使用node.js和socket.io来显示当前有多少用户在我的网站上查看某个页面,方法是发送带有页面地址的消息(即/ homepage或/ events)到node.js服务器,然后读取/写入一个带有地址名称的文件(即homepage.txt或events.txt),获取当前计数并添加1,然后将其写回到文件中,然后执行断开时也是如此,但是请删除1并保存。node.js socket.io页面查看器

这里是我到目前为止的代码,目前不包括用于测试的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 + "!" }); 
    }); 
}); 

但由于某种原因,这似乎并没有工作,所有的服务器说是“信息 - socket.io启动”,没有别的,当用户连接到客户端页面

关于我可能做错什么的任何提示/想法。

感谢你提前 - 温尼

回答

2

此外,它似乎你是包括服务器端socket.io代码。正确的脚本标签会是这样:

<script src="http://localhost:5000/socket.io/socket.io.js"></script> 
+0

哇,我要说它不应该作为重要的socket.io.js是在为客户端页面和服务器脚本相同的相对direcotry,但实际工作,三江源非常很多,只有1个问题,我该如何摆脱socket.io调试消息,他们讨厌我 – MRVDOG

+0

要隐藏调试消息,请在“var io = ...”行下添加: io.set('log 1级); 可能的日志级别在这里解释:https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO – m6k

+0

谢谢,我真的想通了“.listen(5000,{log:false}) “ – MRVDOG

1

在你写的线,也有你的代码中的一些问题。

socket.on('viewing', function(data){ 
    console.log("User Is Viewing: " + data);//it should be data.page 
}); 

此外,当disconnect事件发生在服务器端,用户已经离开了页面,关闭套接字,因此你不能送什么东西给客户端。解决方案是从客户端发送disconnected事件。有些事件表明用户离开页面,如onbeforeunload事件。