2013-01-13 78 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事件。