Node中的Socket.IO 简单Demo及说明
注:下面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及说明的更多相关文章
- node中的socket.io制作命名空间
如果开发者想在一个特定的应用程序中完全控制消息与事件的发送,只需要使用一个默认的"/"命名空间就足够了.但是如果开发者需要将应用程序作为第三方服务提供给其他应用程序,则需要为一个用 ...
- socket.io简单说明及在线抽奖demo
socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...
- 使用Node.js的socket.io模块开发实时web程序
首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用
Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建
前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...
- Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门
前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...
- Node.js 和Socket.IO 实现chat WEBIM
socket官方: http://socket.io/ 需求:实现WEB IM功能,数据从服务器PUSH 不是PULL websocket是基于HTML5的新特性,不兼容IE6,7,8 .. ...
- node.js中使用socket.io + express进行实时消息推送
socket.io是一个websocket库,包含客户端的js和服务端的node.js,可以在不同浏览器和移动设备上构建实时应用. 一.安装 socket.io npm install socket. ...
- node的express中使用socket.io
服务器端server.js代码 var express=require("express"); var http=require("http"); var si ...
随机推荐
- GridControl CardView ShowCardExpandButton or GridCardExpandButton
关于DevExpress.XtraGrid.v13.1.dll和DevExpress.XtraGrid.v12.2.dll中ShowCardExpandButton 或者 GridCardExpan ...
- AC日记——【模板】线段树 1 洛谷 P3372
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个 ...
- 微信小程序之微信支付C#后台(统一下单)
一.微信小程序支付 1.微信小程序端请求支付接口 商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付.具体可以查看接口示例. 接口传入参数示例: <xm ...
- 详解Java中的字符串
字符串常量池详解 在深入学习字符串类之前, 我们先搞懂JVM是怎样处理新生字符串的. 当你知道字符串的初始化细节后, 再去写String s = "hello"或String s ...
- codevs——3344 迷宫
3344 迷宫 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 小刚在迷宫内,他需要从A点出发,按顺序经过B, ...
- Xamarin.Forms的ActivityIndicator和ProgressBar比较
Xamarin.Forms的ActivityIndicator和ProgressBar比较 在Xamarin.Forms中,控件ActivityIndicator和ProgressBar都用来表示 ...
- inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)
1.准备环境 # 系统支持的话,下面的目录就会存在 ls /proc/sys/fs/inotify/ rpm -qa inotify-tools yum -y install inotify-tool ...
- 346. Moving Average from Data Stream
/* * 346. Moving Average from Data Stream * 2016-7-11 by Mingyang * 这里注意的就是(double) sum / count * su ...
- atom 隐藏右边的白线
atom-text-editor.editor .wrap-guide {//隐藏右边的白线visibility: hidden;}
- win7 32位配置apache+wsgi+django环境
1下载xampp,里面有apache,mysql,phpmyadmin, 2 下载wsgi,http://download.csdn.net/download/copter/9192361 将对应的模 ...