node与socket.io搭配小例子-转载
- //服务端代码
- 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搭配小例子-转载的更多相关文章
- 转载:node.js socket.io
本文转自:http://www.xiaocai.name/post/cf1f9_7b6507 学习node.js socket.io 使用 用node.js(socket.io)实现数据实时推送 在 ...
- 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】
原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...
- 基于node.js+socket.io+html5实现的斗地主游戏(1)概述
一.游戏描述 说是斗地主游戏,其实是寝室自创的"捉双A",跟很多地方的捉红10.打红A差不多,大概规则是: 1.基础牌型和斗地主一样,但没有大小王,共52张牌,每人13张,这也是为 ...
- 使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
- (转)使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
- node及socket.io实现简易websocket双向通信
技术栈: vue2.0 + node + websocket( socket.io ) 1. 安装依赖 初始化vue项目后输入下方指令安装依赖包 // 推荐cnpm安装 npm i vue-socke ...
- socket.io搭配pm2(cluster)集群解决方案
socket.io与cluster 在线上系统中,需要使用node的多进程模型,我们可以自己实现简易的基于cluster模式的socket分发模型,也可以使用比较稳定的pm2这样进程管理工具.在常规的 ...
- AngularJS+Node.js+socket.io 开发在线聊天室
所有文章搬运自我的个人主页:sheilasun.me 不得不说,上手AngularJS比我想象得难多了,把官网提供的PhoneCat例子看完,又跑到慕课网把大漠穷秋的AngularJS实战系列看了一遍 ...
- node的socket.io类库概述
socket.io是一个简单的小类库,该类库实现的功能类似于node中的net模块所实现的功能. 这些功能包括websocket通信,xhr轮询,jsonp轮询等. socket类库可以接受所有与服务 ...
随机推荐
- Linux超快速安装Ruby on Rails
Linux超快速安装Ruby on Rails 时间 2014-11-25 11:45:11 Flincllck Talk 原文 http://www.flincllck.com/quick-ins ...
- 在活动中使用Menu
1.在res下创建menu普通文件夹,在menu下创建名为main的Menu资源文件 2.在menu组件下创建item组件:资源id,title标题名称 3.覆盖活动中的onCreateOptions ...
- Windows Azure 将正式更名为 Microsoft Azure
微软的公共云平台在2014年4月3日正式从Windows Azure 更名为Microsoft Azure. windows azure是二级产品名,microsoft azure是一级产品名,和mi ...
- [摘]在ASP.NET MVC中使用DropDownList
在ASP.NET MVC中,尽管我们可以直接在页面中编写HTML控件,并绑定控件的属性,但更方便的办法还是使用HtmlHelper中的辅助方法.在View中,包含一个类型为HtmlHelper的属性H ...
- 让我轻轻的告诉你AliSQLselect语句中in多少个合适
在以往的分享中,不止一次被开发问: 在MySQL的官方手册上有这么一句话: the optimizer can estimate the row count for each range using ...
- 09A-独立按键消抖实验01——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的: 1.复习状态机的设计思想并以此为基础实现按键消抖 2.单bit异步信号同步化以及边沿检测 3.在激励文件中学会使用随机数发生函数$random 4.仿真模 ...
- treeview所有节点递归解法(转+说明)或者说递归的实际应用
public void PrintTreeViewNode(TreeNodeCollection node) { foreach (TreeNode n in node) { Response.Wri ...
- 自己动手写ORM框架
提起ORM框架,大家都很熟悉,网上流行的ORM框架有很多,其中出名的有一些,不出名的更是数不胜数. 下面是自己实现的一个简单的ORM框架,实现了常用的增删查改功能,供大家研究ORM实现原理. 功能描述 ...
- IOS textView获取光标定位,以及选中
当textview成为第一响应者的时候就会调用一个协议方法 - (void)textViewDidChangeSelection:(UITextView *)textView; 在这个协议方法中可以实 ...
- asp的gridview
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI ...