文件:
jquery-1.7.1.min.js
socket.io.js
client.js
node.js (放到与public同级的目录下)
index.html
文件结构:
注意:本地IP是192.168.145.10
index.html
<html>
<head>
<script src="./public/jquery-1.7.1.min.js"></script>
<script src="./public/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="./public/client.js"></script>
<style type="text/css">
#content { width: 600px; margin: 0 auto; }
textarea { width: 400px; height: 40px;}
</style>
<script>
$(document).ready(function() {
initialize();
});
</script>
</head>
<body>
<div id="content">
<h1>Micro Chat</h1>
<div id="status"></div>
<div id="thread">
</div>
<div>
<textarea id="text" name="text"></textarea>
</div>
<div>
<button id="send" οnclick="say();">Send</button>
</div>
</div>
</body>
</html>
node.js
var express = require('express'); var app = express.createServer(); var io = require('socket.io').listen(app); app.configure(function(){ app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.logger()); app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(express.session({ secret:"sdfsdfsdfjkdsf", })); }); var conns = {}; io.sockets.on('connection',function(socket){ var cid = socket.id; for(var ccid in conns){ var soc = conns[ccid]; soc.emit('join',{cid:socket.id}); } conns[cid] = socket; socket.on('disconnect',function(){ delete conns[cid]; for(var cid in conns) { var soc = conns[cid]; soc.emit('quit',{cid:cid}); } }); socket.on('say',function(data){ data.cid = cid; for(var ccid in conns){ var soc = conns[ccid]; soc.emit('broadcast',data); } }); }); app.get('/',function(req,res){ res.sendfile(__dirname + '/public/index.html'); }); app.use('/public',express.static(__dirname + '/public')); app.listen(3000); console.log('daemon start on http://192.168.145.10:3000');
client.js
var socket = io.connect("http://192.168.145.10:3000");
socket.on('quit',function(data){
status('Client' + data.cid + 'quits!');
});
socket.on('join',function(data){
status('Client' + data.cid + 'joins!');
});
socket.on('broadcast',function(data){
$('#thread').append($('<div>').html('client' + data.cid + ' say:<br/>' + data.w));
});
function say() {
var words = $('#text').val();
if ($.trim(words)) {
socket.emit('say',{w:words});
$('#text').val('');
}
}
function status(w) {
$('#status').html(w);
}
function initialize() {
$(document).delegate('textarea','keydown',function(evt){
if (evt.keyCode == 13 && evt.ctrlKey) {
$('#send').focus().click();
}
});
}