使用socket实现简单的统计站点人数
服务器端:
1)使用一个javascript变量来统计
2)使用广播,给所有已经连接的客户端发送人数
3)给刚刚连接上的客户端响应人数
代码如下:
var http=require('http');
var fs=require('fs');
var counter=0;
var server=http.createServer(function(req,res){
fs.readFile('./index.html',function(error,data){
res.writeHead(200,{'Content-Type':'text-html'});
res.end(data,'utf-8');
});
var io=require('socket.io').listen('server');
io.sockets.on('connection',function(socket){
count++;
console.log("user connected"+count+"user(s) present.");
socket.emit('users',{number:counter});
socket.broadcast.emit('users':{number:counter});
socket.on('disconnect',function(){
counter--;
console.log("user disconnected"+counter+"user(s)present.");
socket.broadcast.emit('user',{number:counter});
});
});
}).listen(3000,"127.0.0.1");
console.log('server running at http://127.0.0.1:3000/');
客户端:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>socket.io example</title>
</head>
<body>
<h1>socket.io example</h1>
<h2>how many users are here?</h2>
<p id="count"></p>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket=io.connect('http://127.0.0.1:3000');
var count=document.getElementById('count');
socket.on('users',function(data){
console.log("got update from the server");
console.log("there are "+data.number+"users");
count.innerHTML=data.number
});
</script>
</body>
</html>
package.jade中添加如下依赖:
{
"name":"socketio_example",
"version":"0.0.1",
"private":"true",
"dependencies":{
"socket.io":"0.8.7"
}
}
测试结果如下:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>d:
D:\>cd nodejs
D:\nodejs>cd socketTest
D:\nodejs\socketTest>npm install
D:\nodejs\socketTest>node app.js
Server running at http://127.0.0.1:3000/
info - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 8548401971022221
debug - setting request GET /socket.io/1/websocket/8548401971022221
debug - set heartbeat interval for client 8548401971022221
debug - client authorized for
debug - websocket writing 1::
User connected. 1 user(s) present.
debug - websocket writing 5:::{"name":"users","args":[{"number":1}]}
debug - broadcasting packet
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 1192568801500835729
debug - setting request GET /socket.io/1/websocket/1192568801500835729
debug - set heartbeat interval for client 1192568801500835729
debug - client authorized for
debug - websocket writing 1::
User connected. 2 user(s) present.
debug - websocket writing 5:::{"name":"users","args":[{"number":2}]}
debug - broadcasting packet
debug - websocket writing 5:::{"name":"users","args":[{"number":2}]}
debug - emitting heartbeat for client 8548401971022221
debug - websocket writing 2::
debug - set heartbeat timeout for client 8548401971022221
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 8548401971022221
debug - set heartbeat interval for client 8548401971022221
debug - emitting heartbeat for client 1192568801500835729
debug - websocket writing 2::
debug - set heartbeat timeout for client 1192568801500835729
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 1192568801500835729
debug - set heartbeat interval for client 1192568801500835729
info - transport end
debug - set close timeout for client 1192568801500835729
debug - cleared close timeout for client 1192568801500835729
debug - cleared heartbeat interval for client 1192568801500835729
User disconnected. 1 user(s) present.
debug - broadcasting packet
debug - websocket writing 5:::{"name":"users","args":[{"number":1}]}
debug - discarding transport
debug - emitting heartbeat for client 8548401971022221
debug - websocket writing 2::
debug - set heartbeat timeout for client 8548401971022221
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 8548401971022221
服务器端:
1)使用一个javascript变量来统计
2)使用广播,给所有已经连接的客户端发送人数
3)给刚刚连接上的客户端响应人数
代码如下:
var http=require('http');
var fs=require('fs');
var counter=0;
var server=http.createServer(function(req,res){
fs.readFile('./index.html',function(error,data){
res.writeHead(200,{'Content-Type':'text-html'});
res.end(data,'utf-8');
});
var io=require('socket.io').listen('server');
io.sockets.on('connection',function(socket){
count++;
console.log("user connected"+count+"user(s) present.");
socket.emit('users',{number:counter});
socket.broadcast.emit('users':{number:counter});
socket.on('disconnect',function(){
counter--;
console.log("user disconnected"+counter+"user(s)present.");
socket.broadcast.emit('user',{number:counter});
});
});
}).listen(3000,"127.0.0.1");
console.log('server running at http://127.0.0.1:3000/');
客户端:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>socket.io example</title>
</head>
<body>
<h1>socket.io example</h1>
<h2>how many users are here?</h2>
<p id="count"></p>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket=io.connect('http://127.0.0.1:3000');
var count=document.getElementById('count');
socket.on('users',function(data){
console.log("got update from the server");
console.log("there are "+data.number+"users");
count.innerHTML=data.number
});
</script>
</body>
</html>
package.jade中添加如下依赖:
{
"name":"socketio_example",
"version":"0.0.1",
"private":"true",
"dependencies":{
"socket.io":"0.8.7"
}
}
测试结果如下:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:\Users\Administrator>d:
D:\>cd nodejs
D:\nodejs>cd socketTest
D:\nodejs\socketTest>npm install
D:\nodejs\socketTest>node app.js
Server running at http://127.0.0.1:3000/
info - socket.io started
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 8548401971022221
debug - setting request GET /socket.io/1/websocket/8548401971022221
debug - set heartbeat interval for client 8548401971022221
debug - client authorized for
debug - websocket writing 1::
User connected. 1 user(s) present.
debug - websocket writing 5:::{"name":"users","args":[{"number":1}]}
debug - broadcasting packet
debug - served static content /socket.io.js
debug - client authorized
info - handshake authorized 1192568801500835729
debug - setting request GET /socket.io/1/websocket/1192568801500835729
debug - set heartbeat interval for client 1192568801500835729
debug - client authorized for
debug - websocket writing 1::
User connected. 2 user(s) present.
debug - websocket writing 5:::{"name":"users","args":[{"number":2}]}
debug - broadcasting packet
debug - websocket writing 5:::{"name":"users","args":[{"number":2}]}
debug - emitting heartbeat for client 8548401971022221
debug - websocket writing 2::
debug - set heartbeat timeout for client 8548401971022221
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 8548401971022221
debug - set heartbeat interval for client 8548401971022221
debug - emitting heartbeat for client 1192568801500835729
debug - websocket writing 2::
debug - set heartbeat timeout for client 1192568801500835729
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 1192568801500835729
debug - set heartbeat interval for client 1192568801500835729
info - transport end
debug - set close timeout for client 1192568801500835729
debug - cleared close timeout for client 1192568801500835729
debug - cleared heartbeat interval for client 1192568801500835729
User disconnected. 1 user(s) present.
debug - broadcasting packet
debug - websocket writing 5:::{"name":"users","args":[{"number":1}]}
debug - discarding transport
debug - emitting heartbeat for client 8548401971022221
debug - websocket writing 2::
debug - set heartbeat timeout for client 8548401971022221
debug - got heartbeat packet
debug - cleared heartbeat timeout for client 8548401971022221
debug - set heartbeat interval for client 8548401971022221