注:下面Demo的Server和Client都是纯后端。 并没有web页面。

Server端代码:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server); //定义变量,用来存储socket。如果是多进程的话,那么socket可以考虑存入redis中
var socketList = {};
//客户端连接服务器socket成功时触发的事件;
io.sockets.on('connection', function (socket) {
//连接成功时,告诉客户端连接成功;可以通过send来发送信息
socket.send({status: 1});
//socket失去连接时触发(包括关闭浏览器,主动断开,掉线等任何断开连接的情况)
socket.on('disconnect', function () {
console.log("client disconnect");
//客户端失去
for (var key in socketList) {
delete socketList[key];
}
});
//接收客户端send来的信息
socket.on('message', function (data) {
var areaid = data.areaid;
//用来保存socket,键值为区域
socketList[areaid] = socket;
});
//注意:这里是从客户端的角度来提交事件
//socket.broadcast.to('my room').emit('event_name', data);
}); //测试。延迟5S等客户端连接上后发送广播
setTimeout(broadcast,5000); function broadcast(){
//发送广播测试,system为约定的广播事件
io.sockets.emit('system','broadcast test');
// 向another room广播一个事件,在此房间所有客户端都会收到消息
//注意:这里是从服务器的角度来提交事件
//io.sockets.in('another room').emit('event_name', data);
}
server.listen(3000);

客户端代码:

var express = require('express');
var app = express();
var server = require('http').createServer(app);
server.listen(3001); //引用的应该是socket.io-client;
var io = require('socket.io-client');
//connect函数可以接受一个url参数,url可以socket服务的http完整地址,也可以是相对路径,如果省略则表示默认连接当前路径。
// 与服务端类似,客户端也需要注册相应的事件来捕获信息,不同的是客户端连接成功的事件是connect。
//如果要传参,写法为var socket = io.connect('/',{ _query:'sid=123456'}); 服务器端取参数为var sid =socket.request._query.sid;
var socket = io.connect('http://127.0.0.1:3000');
socket.on('connect', function () {
console.log('connect successed');
});
//socket失去连接时触发(包括关闭浏览器,主动断开,掉线等任何断开连接的情况)
socket.on('disconnect',function(){
console.log("server disconnect");
})
//接收服务器端send来的信息
socket.on('message', function (data) {
//判断服务器发来状态是否成功
if (data.status && data.status == 1) {
//向服务器端发送信息,areaid(区域)为随意造的一个guid
socket.send({areaid: '6676AE6E-2924-11E5-82B2-005056BBC258'});
}
});
//接收系统广播消息
socket.on('system',function(data){
console.log(data);
})

Demo路径:https://github.com/shadow88sky/socketDemo/tree/master

Node中的Socket.IO 简单Demo及说明的更多相关文章

  1. node中的socket.io制作命名空间

    如果开发者想在一个特定的应用程序中完全控制消息与事件的发送,只需要使用一个默认的"/"命名空间就足够了.但是如果开发者需要将应用程序作为第三方服务提供给其他应用程序,则需要为一个用 ...

  2. socket.io简单说明及在线抽奖demo

    socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...

  3. 使用Node.js的socket.io模块开发实时web程序

    首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统 ...

  4. Node+Express+MongoDB + Socket.io搭建实时聊天应用

    Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...

  5. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...

  6. Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门

    前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...

  7. Node.js 和Socket.IO 实现chat WEBIM

    socket官方:   http://socket.io/  需求:实现WEB IM功能,数据从服务器PUSH  不是PULL  websocket是基于HTML5的新特性,不兼容IE6,7,8 .. ...

  8. node.js中使用socket.io + express进行实时消息推送

    socket.io是一个websocket库,包含客户端的js和服务端的node.js,可以在不同浏览器和移动设备上构建实时应用. 一.安装 socket.io npm install socket. ...

  9. node的express中使用socket.io

    服务器端server.js代码 var express=require("express"); var http=require("http"); var si ...

随机推荐

  1. 现象: shell脚本中source aaa.sh时提示 source: not found

    原因: ls -l `which sh` 提示/bin/sh -> dash 这说明是用dash来进行解析的. 改回方法: 命令行执行:sudo dpkg-reconfigure dash 在界 ...

  2. LeetCode OJ--Permutations *

    https://oj.leetcode.com/problems/permutations/ 写出一列数的全排列 #include <iostream> #include <vect ...

  3. 微信公众号手机端PC端多客服系统

    最近很多客户反应没有专门的客服坐在电脑面前,接收回复客户的问题:不能及时回复客户 咨询的问题,现在我们已经为此帮您解决烦恼!! 支持PC与手机端接收微信客户咨询与回复客户,让您随时随地及时回复客户咨询 ...

  4. CDN或负载均衡或WAF,后端服务器获取真实IP

    问题起因: 1. 后端PHP的$_SERVER["REMOTE_ADDR"]个别服务器获取不到真实IP 2. iptables 和 悬镜 等工具,设置IP黑名单不起作用 简单点说, ...

  5. (5)html音频视频

    音频 1.互联网常用的音频格式 ogg 有损的音频压缩技术 免费的开源音频格式 它可以在相对较低的数据速率下实现比MP3更好的音质 mp3 有损的音频压缩技术 想使用MP3格式发布自己的作品,需要付给 ...

  6. FMDB使用SQLite事务Save Point

    FMDB使用SQLite事务Save Point   在SQLite中,事务提供了批量处理,批量撤销的功能.当批量操作中有一步无法完成操作,就会把执行过的语句都撤销,恢复到撤销前的状态.但是由于SQL ...

  7. codeforces 997E(线段树)

    分析: 首先考虑如何计算整个数组有多少个good区间 容易发现一个区间是good区间当且仅当max-min-len=-1,且任意区间max-min-len>=-1 我们可以枚举右端点,然后维护前 ...

  8. Java中将List转成逗号数组的方案

    说明:逗号字符串转成数组或者List都是可以的,反过来依然可行:但是如果是List<String>转List<Integer>,基本误解,在Java 7只能for循环,如果在J ...

  9. oceanbase 分布式数据库

    http://blog.csdn.net/maray/article/details/7230881 http://weibo.com/raywill2

  10. Android -- AsyncTask 使用和缺陷

    一.AsyncTask的基本用法 由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它.在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: ...