代码:http://download.youkuaiyun.com/detail/chuanyu/9394838
参考:http://www.cnblogs.com/whoamme/p/3459071.html
服务器主要代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var mysql = require('mysql');
var db_chat = 'chat';
var tb_talk = 'talk';
//创建一个connection
var client = mysql.createConnection({
host:'127.0.0.1',
user:'root',
password:'123456',
port:'3306',
});
//创建一个connection
client.connect(function(err){
if(err){
console.log('[query]-:'+err);
return ;
}
console.log('[Connection connect] succeed!');
});
client.query("use "+ db_chat);
app.get('/', function(req, res){
res.send('<h1>Welcome Realtime Server</h1>');
});
//在线用户
var onlineUsers = {};
//当前在线人数
var onlineCount = 0;
io.on('connection', function(socket){
console.log('a user connected');
//监听新用户加入
socket.on('login', function(obj){
//将新加入用户的唯一标识当作socket的名称,后面退出的时候会用到
socket.name = obj.userid;
//检查在线列表,如果不在里面就加入
if(!onlineUsers.hasOwnProperty(obj.userid)) {
onlineUsers[obj.userid] = obj.username;
//在线人数+1
onlineCount++;
}
//向所有客户端广播用户加入
io.emit('login', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
console.log(obj.username+'加入了聊天室');
});
//监听用户退出
socket.on('disconnect', function(){
//将退出的用户从在线列表中删除
if(onlineUsers.hasOwnProperty(socket.name)) {
//退出用户的信息
var obj = {userid:socket.name, username:onlineUsers[socket.name]};
//删除
delete onlineUsers[socket.name];
//在线人数-1
onlineCount--;
//向所有客户端广播用户退出
io.emit('logout', {onlineUsers:onlineUsers, onlineCount:onlineCount, user:obj});
console.log(obj.username+'退出了聊天室');
}
});
//监听用户发布聊天内容
socket.on('message', function(obj){
//向所有客户端广播发布的消息
io.emit('message', obj);
console.log(obj.username+'说:'+obj.content);
var mydate = new Date();
var t = mydate.toLocaleString();
client.query(
'INSERT INTO '+tb_talk+' '+
'SET user = ?, msg = ?',
[obj.username, obj.content],
//'insert into talk (user,msg) values("cy","hello,world")',//ok
//'insert into '+tb_talk+'(user,msg) values('+obj.username+','+obj.content+')',
//" insert into "+tb_talk +" (user,msg) values( "+obj.username+","+obj.content+" )",
//'insert into ' + tb_talk + ' (user,msg) values( '+ obj.username + ','+ obj.content +')',
//'INSERT INTO '+ tb_talk +'values('+null+','+obj.username+','+null+','+obj.content+')',
//'INSERT INTO '+ tb_talk +'values('+obj.username+','+obj.content+')',
function insertCb(err,results,fields){
if(err){
throw err;
}
if(results){
//console.log("ok");
}
//client.end();
}
);
});
});
http.listen(3000, function(){
console.log('listening on *:3000');
});