chat聊天室增加mysql记录功能
2016-01-07 19:02
766 查看
代码:http://download.csdn.net/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');
});
参考: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');
});
相关文章推荐
- mysql常用语句
- 阿里云RDS上用mysqldump导入导出
- mysqldump具体应用实例
- MySQL乐观锁总结和实践
- Mysql笔记
- MySQL中BTREE索引和HASH索引
- mysql5.7免安装版,安装启动
- mysql的binlog日志限制大小和期限设置
- MySQL索引原理及慢查询优化
- mysql prepare 存储过程使用
- mysql列转行
- MySQL数据库连接超时(wait_timeout)问题的处理
- Hibernate com.mysql.jdbc.exceptions.MySQLSyntaxErrorException MYSQL
- MySQL 性能调优的10个方法
- mysql,show processlist,查询一直sending data,影响查询性能
- MySQL Proxy使用
- mysql case结合group+having使用
- windows mysql 5.7 启动和登录问题
- MySql学习笔记
- mysql load csv