node.js+socket.io私人聊天
kevin.Zhu 发布于:2013-2-2 15:33 分类:Nodejs 有 20 人浏览,获得评论 0 条
项目需要,所以学习使用node.js +socket.io实现私人聊天功能,忙活了大半天终于搞明白了,基本原理就是当server端接收到
socket连接请求的时候,就会每一个建立一个socket,而连接的socket由于没有表示,所以每一个socket只可以发送给自己信息,如果要
发送给其他的socket连接信息需要标识其他的socket连接。
废话不多说了,上代码。。
server.js
var io = require('socket.io').listen(8080);
io.set('log level', 1);
var users = {};
io.sockets.on('connection', function (socket) {
io.sockets.emit('connect',{hell:'boy'});
socket.on('private message', function (from,to,msg) {
console.log('I received a private message by ', from, ' say to ',to, msg);
if(to in users){
users[to].emit('to'+to,{mess:msg});
}
});
socket.on('new user',function(data){
if(data in users){
}else{
var nickname = data;
users[nickname]= socket;
}
console.info(users);
});
socket.on('disconnect', function () {
io.sockets.emit('user disconnected');
});
<meta charset="utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
$(function(){
var socket = io.connect('http://localhost:8080');
socket.on('connect', function (data) {
console.log(data);
});
$("#send").click(function(e){
var from = $('#user_name').val(),
msg = $('#message').val(),
to = $('#to').val(),
$message_list = $('#message_list');
socket.emit('new user',from);
socket.emit('private message',from,to,msg);
socket.on('to'+from, function (data) {
$message_list.append('<li>'+data.from+'说'+data.message+'</li><li>');
});
});
});
</script>
姓名:<input id="user_name" type="text"><br>
发送给:<input type="text" id="to"><br>
消息内容:<input type="text" id="message"><button type="button" id="send">发送</button>
<ul id="message_list">
</ul>
</li>
项目运行效果:
\
图示二:
OK,终于可以私聊了。。。
socket连接请求的时候,就会每一个建立一个socket,而连接的socket由于没有表示,所以每一个socket只可以发送给自己信息,如果要
发送给其他的socket连接信息需要标识其他的socket连接。
废话不多说了,上代码。。
server.js
var io = require('socket.io').listen(8080);
io.set('log level', 1);
var users = {};
io.sockets.on('connection', function (socket) {
io.sockets.emit('connect',{hell:'boy'});
socket.on('private message', function (from,to,msg) {
console.log('I received a private message by ', from, ' say to ',to, msg);
if(to in users){
users[to].emit('to'+to,{mess:msg});
}
});
socket.on('new user',function(data){
if(data in users){
}else{
var nickname = data;
users[nickname]= socket;
}
console.info(users);
});
socket.on('disconnect', function () {
io.sockets.emit('user disconnected');
});
});
<meta charset="utf-8">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
<script>
$(function(){
var socket = io.connect('http://localhost:8080');
socket.on('connect', function (data) {
console.log(data);
});
$("#send").click(function(e){
var from = $('#user_name').val(),
msg = $('#message').val(),
to = $('#to').val(),
$message_list = $('#message_list');
socket.emit('new user',from);
socket.emit('private message',from,to,msg);
socket.on('to'+from, function (data) {
$message_list.append('<li>'+data.from+'说'+data.message+'</li><li>');
});
});
});
</script>
姓名:<input id="user_name" type="text"><br>
发送给:<input type="text" id="to"><br>
消息内容:<input type="text" id="message"><button type="button" id="send">发送</button>
<ul id="message_list">
</ul>
</li>
项目运行效果:
\
图示二:
OK,终于可以私聊了。。。