您的位置:首页 > Web前端 > Node.js

nodejs群聊和私聊

2016-07-15 20:33 453 查看
自行安装,代码如下

先安装nodejs

服务器代码

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(83);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}

res.writeHead(200);
res.end(data);
});
}
io.on('connection', function (socket) {
//获取所有用户
var user_list=socket.nsp.adapter.rooms;
//将用户发送到页面
io.emit("user_list",user_list);
socket.on('disconnect', function () {
io.emit("user_list",user_list);
});

socket.on('per2per',function(name,data){
//console.log(socket.id);
//console.log(data.user)
var user=data.user.substr(2);
//console.log(user)
//console.log(data.content)
if(data.user=='all'){
io.emit("message",'all',data.content)
}else{
socket.broadcast.to(data.user).emit("message",name,data.content);
socket.emit("message",user,data.content);
}

})

//admin模块结束

});


客户端代码

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="js/jquery-1.11.1.min.js"></script>
<script src="js/socket.io-1.4.5.js"></script>
<title>nodejs聊天</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<script src="js/bootstrap.min.js"></script>
</head>
<style>
.panel-body{
display:none;
}
</style>
<body>
<div class="container">

<h1 id="count"></h1>
昵称id:<span id="self" style="color:red"/></span>
发送给:<span id="friend" style="color:green" value="all"/>all</span>
<div class="row">
<div class="col-md-4" style="overflow:auto">
<ul class="list-group" id="userlist" onclick="javascript:void(0)">
<li class="list-group-item">
<span class="badge">新</span>
24*7 支持
</li>
</ul>
</div>
<div class="col-md-8" >

<div class="panel panel-default" >
<!-- Default panel contents -->
<div class="panel-heading" >消息中心</div>
<div class="panel-body" id='text_all' style="height:500px; overflow:auto">
<div class="well well-sm">all</div>
</div>
</div>
<input id="content"/>
<button onclick="send()"  class="btn btn-success">send</button>

</div>
</div><br>

</div>

<script>
$("#text_all").css('display','block');
var socket = io('http://'+location.host+':83'); // TIP: io()
socket.on('connect', function () {
$("#self").html(socket.id);//获取自己socke.id
//获取用户列表
socket.on('user_list',function(data){
$("#userlist").empty();
//console.log(data);
var count=0;
//所有人标签
var text='<li class="list-group-item" value="all"><span id="badge_all" class="badge">0</span>all</li>'
$("#userlist").append(text)

for(var x in data){
//console.log(x)
count++;
var name=x;
var self = x.substr(2)
//生成用户列表
if(self!=socket.id){
var text='<li class="list-group-item" value="'+name+'"><span id="badge_'+self+'" class="badge">0</span>'+name+'</li>'
$("#userlist").append(text)
}
if($("#text_"+self).length==0){
var panel='<div class="panel-body" id="text_'+self+'" style="height:500px; overflow:auto"><div class="well well-sm">和'+self+'私聊中心</div></div>'
$('.panel').append(panel);
}
}
//$(".panel-body").hide();
//$("#text_all").show();
$("#count").html("在线人数:"+count);
})
//来接受消息
socket.on('message',function(name,data){
//console.log(data);
//console.log(name)
//当前时间
var myDate=new Date()
var data_text='<div class="well well-sm">'+myDate.toLocaleString()+":"+data+'</div>'
$("#text_"+name).append(data_text)
//未读消息数+1
var val=$('#badge_'+name).html()
//console.log(val)
$('#badge_'+name).html(parseInt(val)+1)
//消息滚动到底部
$("#text_"+name).scrollTop(99999999);
})
});

//消息发送
function send(){
var content= $("#content").val();
//console.log(content.length)
var length=content.length
if(length==0){
alert("不能为空")
return false;
}else if(length>20){
alert("消息太长了")
return false;
}
var user= $("#friend").attr('value');
//console.log(content);
//console.log(user);
socket.emit("per2per",socket.id,{user:user,content:content});
}
//点击用户列表
$(document).on("click",".list-group-item",function(){
$('.list-group-item').css('background-color','white')
$('.list-group-item').css('color','black')
$(this).css('background-color','green')
$(this).css('color','white')
var val= $(this).attr('value');
$("#friend").attr('value',val)
$("#friend").html(val)

if(val!='all'){
val = val.substr(2)
}
$(".panel-body").hide();
$("#text_"+val).show();
})

</script>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: