注:下面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. usb_control_msg参数详解【转】

    转自:http://blog.chinaunix.net/uid-25909619-id-3243059.html usb_control_msg() struct usb_ctrlrequest|- ...

  2. 反汇编->C++内联

    C/C++提供了内联函数机制 内联函数就是向编译器建议:编译这个函数的时候.直接把函数展开,而不是进行函数调用call.当然编译器并不接受这个建议.仍然把他当做普通函数进行编译 使用内联函数的优点:减 ...

  3. react-highcharts

    import ReactHighcharts from'react-highcharts'; class SummaryLeft extends Component { render () {var ...

  4. 微信小程序之视图容器(swiper)组件创建轮播图

    一.视图容器(Swiper) 1.swiper:滑块视图容器 微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/swi ...

  5. 进击JavaScript核心 --- (2)函数和预解析机制

    一.函数 每个函数都是 Function类型的实例,也具有属性和方法.由于函数也是一个对象,因此函数名实际上也是一个指向函数对象的指针,不会与某个函数绑定 1.函数的定义方式 (1).函数声明 fun ...

  6. [开源] FreeSql.Tools Razor 生成器

    FreeSql 经过半年的开发和坚持维护,在 0.6.x 版本中完成了几大重要事件: 1.按小包拆分,每个数据库实现为单独 dll: 2.实现 .net framework 4.5 支持: 3.同时支 ...

  7. Socks5代理Socks5 Proxy

    Socks5代理Socks5 Proxy   Socks5代理是基于Socks协议的一种代理模式.其中,5表示该协议的版本号.它可以让局域网的计算机通过socks5代理服务器,访问外网的内容.由于它工 ...

  8. PropertyPlaceholderConfigurer 基本用法

    目录 一.PropertyPlaceholderConfigurer 的继承体系 二.PropertyPlaceholderConfigurer 的基本概念 三.PropertyPlaceholder ...

  9. layDate 日期与时间组件 入门

    首先第一步 在官方下载layDate文件.layUI官网:http://layer.layui.com/    https://www.layui.com/laydate/ layDate文件的下载步 ...

  10. n个平面把空间最多分成几个部分?

    题目: n个平面把空间最多分成几个部分? 解答: 1条直线可以把平面分成2部分,2条直线最多可以把平面分成4部分, 3条直线最多可以把平面分成几部分,4条直线呢?你能不能想出n条直线最多可以把平面分成 ...