//服务端代码
io = require('socket.io').listen(app),
fs = require('fs'),
cookie=require('cookie');
request=require('request');
global.userlist={}; app.listen(8080);
//io.set('log level', 1);//将socket.io中的debug信息关闭 function handler (req, res) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
res.end('Hello World\n');
}
var content;
var socketUser = {};
var settings={};
settings.host='http://localhost/test/node/myapp/';
io.sockets.on('connection', function (socket) {
if(socket.handshake.headers.cookie){
var curcookie=cookie.parse(socket.handshake.headers.cookie);
var id=curcookie['PHPSESSID'];
request(settings.host+'getinfo.php?type=getinfo&sid='+id,function(err,res,body){
if(!err&&res.statusCode==200){
if(body){
body=eval('('+body+')');
var userid=body.ID;
var username=body.UserName;
var online=body.Online;
//将新用户存进socket用户列表中
userlist[id]=socket; socketUser[id] = {
'userid':userid,
'username':username
};
//更改上线状态
request(settings.host+'getinfo.php?type=online&sid='+id,function(err,res,body){}) //发送信息给新登录用户
socket.emit('system',{
'alluser':socketUser
}); //上线欢迎
socket.emit('open',{
'msg':'welcome!'
}) //下线推送通知 disconnect方法名不能修改
socket.on('disconnect',function(){
//更改用户不在线
socketUser[id]=null;
userlist[id]=null;
request(settings.host+'getinfo.php?type=unline&sid='+id,function(err,res,body){})
socket.broadcast.emit('broadcast',{
'msg':'noline',
'unlineid':userid,
'unlinename':username,
'type':1
});
}) //监听接收用户信息
socket.on('sendnews', function (data) {
if(data.touserid&&userlist[data.touserid]!=undefined){
var user=userlist[data.touserid];
data.fromusername=socketUser[data.fromuserid].username;
//将用户信息发送给指定用户
user.emit('receivenews',data);
}else{
socket.emit('receivenews',data);
}
}); //广播 推送已登录的用户
socket.broadcast.emit('broadcast',{
'userid':userid,
'username':username,
'type':2
});
}else{
console.log('falseness connect');
}
}
})
}else{
console.log('cookie not exist');
}
});
//客户端代码

<?php
$data = $_GET;
if (!isset($data['username']) || $data['username'] === '' || !isset($data['id']) || $data['id'] === '') {
header("location:login.php");
}
session_id($data['id']);
session_start();
$userid = $data['id'];
$name = $data['username'];
$con = <a href="https://www.baidu.com/s?wd=mysql_connect&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YvPAndmhNWnWu9nvczmWb10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHT1n1D4P1R4PjnkPjcdnW6vPs" target="_blank" class="baidu-highlight">mysql_connect</a>("localhost", "root", "") or die("sds");
<a href="https://www.baidu.com/s?wd=mysql_select_db&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1YvPAndmhNWnWu9nvczmWb10ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHT1n1D4P1R4PjnkPjcdnW6vPs" target="_blank" class="baidu-highlight">mysql_select_db</a>("test", $con);
mysql_query("set names utf8");
$sql = 'select * from io_user where username="' . $name . '" and ID=' . $userid;
$result = mysql_query($sql);
$res = mysql_fetch_assoc($result);
if (!$res) {
header("location:login.php");
}
?>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ssocket</title>
<script type="text/javascript" src="public/javascripts/jquery.min.js"></script>
<script type="text/javascript" src="http://localhost:8080/socket.io/socket.io.js"></script>
</head> <body>
<p>我的id:<?php echo $userid ?></p>
<p>我的名字:<?php echo $name; ?></p>
<h4>在线用户列表</h4>
<table border="1" id="userlists">
<thead>
<tr>
<th width="80px">ID</th>
<th width="80px">用户名</th>
<th width="80px">选中</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<p style="margin-top:10px">
信息:
<input type="text" style="width:338px" id="content">
<button id="send">发送</button>
</p>
<div id="msg"></div>
<div id="unline"></div>
<script type="text/javascript">
var userid='<?php echo $userid; ?>';
var username='<?php echo $name; ?>';
var socket = io.connect('http://localhost:8080'); //欢迎信息
socket.on('open',function(res){
console.log(res);
}) //无连接
socket.on('disconnect',function(res){
console.log('not connect');
}) //接收用户消息
socket.on('receivenews',function(res){
var html='<p>来自用户 ('+res.fromusername+') 的消息: '+res.content+'</p>';
$('#msg').append(html)
}) //接收系统消息
socket.on('system',function(res){
if(res.alluser){
var html='';
var time=0;
$.each(res.alluser,function(k,v){
if(v==null||v.userid==userid){
return;
}
time++;
html+='<tr userid="'+v.userid+'"><td>'+time+'<td>'+v.username+'</td>';
html+='<td><input type="checkbox" class="checkbox" userid="'+v.userid+'"></td></tr>'; })
$('#userlists tbody').html(html);
}
}) //获取推送信息
socket.on('broadcast',function(res){
if(res.type==1&&res.unlineid!=userid){
$('#userlists tbody tr[userid="'+res.unlineid+'"]').remove();
$('#unline').append('<p>用户'+res.unlinename+'离线</p>')
return false;
}
if(res.type==2&&res.userid){
if(res.userid==userid){
return false;
}
if($('#userlists tbody tr[userid="'+res.userid+'"]').length>0){
return false;
}
var html='';
var length=$('#userlists tbody tr').length;
html+='<tr userid="'+res.userid+'"><td>'+(length+1)+'<td>'+res.username+'</td>';
html+='<td><input type="checkbox" class="checkbox" userid="'+res.userid+'"></td></tr>';
$('#userlists tbody').append(html);
$('#unline').append('<p>用户'+res.username+'上线</p>')
return false;
}
}) $(function(){
$('.checkbox').live('click',function(){
if($(this).attr('checked')=='checked'){
$('.checkbox').removeAttr('checked');
$(this).attr('checked',true);
} }) //输入框回车事件
$("#content").keyup(function(e){
if(e.keyCode==13){
$('#send').trigger('click');
}
return false;
}); $('#send').click(function(){
var content=$('#content').val();
var data={};
var touserid=$('.checkbox[checked]').attr('userid');
if(touserid==undefined){
alert('请选择用户');
return false;
}
if(content!=''){
$('#content').val('');
data.fromuserid=userid;
data.touserid=touserid;
data.content=content;
//发送信息
socket.emit('sendnews',data);
}
})
})
</script>
</body>
</html>

代码网上转载而来,质量不论,仅做参考

node与socket.io搭配小例子-转载的更多相关文章

  1. 转载:node.js socket.io

    本文转自:http://www.xiaocai.name/post/cf1f9_7b6507  学习node.js socket.io 使用 用node.js(socket.io)实现数据实时推送 在 ...

  2. 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

    原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...

  3. 基于node.js+socket.io+html5实现的斗地主游戏(1)概述

    一.游戏描述 说是斗地主游戏,其实是寝室自创的"捉双A",跟很多地方的捉红10.打红A差不多,大概规则是: 1.基础牌型和斗地主一样,但没有大小王,共52张牌,每人13张,这也是为 ...

  4. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  5. (转)使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  6. node及socket.io实现简易websocket双向通信

    技术栈: vue2.0 + node + websocket( socket.io ) 1. 安装依赖 初始化vue项目后输入下方指令安装依赖包 // 推荐cnpm安装 npm i vue-socke ...

  7. socket.io搭配pm2(cluster)集群解决方案

    socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具.在常规的 ...

  8. AngularJS+Node.js+socket.io 开发在线聊天室

    所有文章搬运自我的个人主页:sheilasun.me 不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍 ...

  9. node的socket.io类库概述

    socket.io是一个简单的小类库,该类库实现的功能类似于node中的net模块所实现的功能. 这些功能包括websocket通信,xhr轮询,jsonp轮询等. socket类库可以接受所有与服务 ...

随机推荐

  1. JSP中动态INCLUDE与静态INCLUDE的区别

    动态INCLUDE 用法: <jsp:include page="included.jsp" flush="true" /> 说明: 它总是会检查所 ...

  2. swift基础:第三部分:对第一部分的补充说明

    今天是我学习swift的第二天,虽然我和swift的距离有点远,但我相信,我会慢慢的接近这门语言的.好了,我们聊聊昨天晚上的事吧,昨天晚上下班早,回到家时,真是惊喜哈,宿舍那两做好了饭,等我吃饭,想对 ...

  3. 易语言调用windows消息函数

    1.SendMessageCallbackA的调用方法 .版本2 .DLL命令 发送消息返回_, 整数型, "user32.dll", "SendMessageCallb ...

  4. 夺命雷公狗-----React---19--表单的值的修改

    少了1个e,在代码部分补回,否则会报错 <!DOCTYPE> <html> <head> <meta charset="utf-8"> ...

  5. Java比C++好在哪儿?

    1.内外局部变量,不允许重名,避免了C++的那种混淆. 2.语言层面支持多线程,大幅减少了线程同步所需的代码量. 3.匿名类,匿名函数,可以作为参数直接写在参数所需要的位置,而不需要在其它地方再定义实 ...

  6. MAC OS UI设计

    对比MAC OS 10.9到10.11的UI设计,苹果曾经卓尔不群的审美观逐步变得泯然众人. 当苹果也跟上扁平化的浪潮,许多搞设计的朋友都一时难以接受,曾经潮流的引领者变成了亦步亦趋的跟随者. MAC ...

  7. Swift2.3 --> Swift3.0 的变化

    Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...

  8. Oracle12c CDB和PDB数据库的启动与关闭说明

    Oracle 12c中,增加了可插接数据库的概念,即PDB,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB). CDB全称为Container Database,中文翻译为数据库容器,PDB ...

  9. 笔记汇总.md

    ```javascript 1.js对象,value的值取不到,试着将引入的js文件放到body的后面 $("input[type='time']").change( functi ...

  10. java full gc

    转自:http://blog.sina.com.cn/s/blog_7a351012010163a1.html