socket.io的基本使用
服务端:
1.监听客户端连接:
io.on("connection",socket=>{ });
不分组数据传输:传输对象为当前socket
2.1给该socket所有客户端广播消息
socket.emit("名称",内容);
2.2给该socket除了自己外的所有客户端广播消息
socket.broadcast.emit("名称",内容);
2.3给该socket所有客户端广播消息
socket.emit("名称",内容);
2.4给在game房间内除了自己的其他所有客户端广播消息
socket.broadcast.to(‘game’).emit("名称",内容);
2.5给在game房间内包括自己的所有客户端广播消息
io.sockets.in(‘game’).emit("名称",内容);
3.监听该socket的客户端发送给服务端的消息
socket.on("名称",msg=>{ });
分组数据传输:生成命名空间来管理用户
服务端:
io.sockets.on('connection', function (socket) {
socket.on('firefox', function (data) {
socket.join('firefox');
});
socket.on('chrome',function(data){
socket.join('chrome');
});
});
//emit to 'room' except this socket client
socket.broadcast.to('chrome').emit('event_name', data);
//emit to all socket client in the room
io.sockets.in('chrome').emit('event_name', data)
客户端:
socket.emit('firefox'); //就可以加入 firefox 聊天室
socket.emit('chrome'); //就可以加入 chrome 聊天室
socket连接需要添加权限验证,让已登录用户socket直接连接到服务器上,未登陆的用户无条件拒绝连接
callback 函数有两个参数,第一个为 error ,第二个参数为是否授权bool值,通过授权回调函数应为 callback(null,true) ,其它情况下都为拒绝建立连接。
io.sockets.authorization(function (handshakeData, callback) {
callback(null, true);
}).
websocket是持久化的协议,http是非持久化的协议。
http的1.0协议中一个http连接只有一次request和response;
http的1.1协议中允许一个http连接,存在多次请求和接收数据。
websocket连线过程中,浏览器和服务器只需要做一个握手的动作就形成了一条快速通道,实现两者相互推送数据。
Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。
在客户端的话,可以通过<script src="/socket.io/socket.io.js"></script>
或引用socket.io的CDN服务。 <scriptsrc="http://cdn.socket.io/stable/socket.io.js"></script>
socket.io实现监听:
1.引用socket.io模块,调用listen方法传入端口号即可;
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
socket.io实现事件注册:
服务端:connection、disconnect、emit
客户端:connect、connecting、disconnect、connect_failed、reconnect、emit
io.on(connection,function(socket){
//连接成功
console.log("socket连接成功")
//断开连接
socket.on('disconnect',function(){
console.log("socket连接断开")
})
})
socket.io提供两种服务端广播方式。参数一:名称;参数二:内容
1.全局广播:socket.broadcast.emit('DATA',data);
2.命名空间广播:socket.broadcast.to('chat').emit('DATA',data)
1.创建对象:var ws = new WebSocket(url,name);
2.发送文本消息:ws.send(msg);
3.接受消息:ws.onmessage = (function(){...})();
4.错误处理:ws.onerror = (function(){...})();
5.关闭连接:ws.close();
var socket;
if(typeof(WebSocket) == "undefined") {
alert("您的浏览器不支持WebSocket");
return;
}
//连接
$("#btnConnection").click(function() {
//实例化WebSocket对象,指定要连接的服务器地址与端口
socket = new WebSocket("ws://192.168.1.2:8888");
//打开事件
socket.onopen = function() {
alert("Socket 已打开");
socket.send("这是来自客户端的消息" + location.href + new Date());
};
//获得消息事件
socket.onmessage = function(msg) {
alert(msg.data);
};
//关闭事件
socket.onclose = function() {
alert("Socket已关闭");
};
//发生了错误事件
socket.onerror = function() {
alert("发生了错误");
}
});
服务端:
1.监听客户端连接 io.on('connection',socket=>{ })
socket.io的基本使用的更多相关文章
- 在web浏览器上显示室内温度(nodeJs+arduino+socket.io)
上次的nodejs操作arduino入门篇中实现了如何连接arduino.这次我们来实现通过arduino测量室内温度并在浏览器上显示出来. [所需材料] 硬件:LM35温度传感器,arduino u ...
- Node学习笔记(三):基于socket.io web版你画我猜(二)
上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...
- node.js+socket.io配置详解
由于我是在win7的环境下,在这里就以win7系统为例进行讲解了. 首先需要在nodejs官网下载最新版的node.js,下载完毕直接安装即可,安装成功后在cmd命令行中执行node指令,如下结果就说 ...
- 使用Node.js+Socket.IO搭建WebSocket实时应用
Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...
- socket.io简单入门(一.实现简单的图表推送)
引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主 ...
- websocket与socket.io
什么是Websocket? Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中.WebSocke ...
- socket.io安装部署
需要node.js环境 创建package.json npm init 下载相关依赖 npm install --save express@4.10.2npm会在当前目录下载所需要的依赖到node_m ...
- Node.js、Express、Socket.io 入门
前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...
- socket.io,io=Manager(source, opts)
原文:http://www.cnblogs.com/xiezhengcai/p/3968067.html 当我们在使用 var socket = io("ws://103.31.201.15 ...
- socket.io,命名空间
原文:http://www.cnblogs.com/xiezhengcai/p/3966263.html 命名空间 在api部分我们说io.connect('ws://103.31.201.154:5 ...
随机推荐
- (转)线程池 ExecutorService 详细介绍以及注意点区别
线程池 ExecutorService 相信java开发都用到,这里做个简单笔记 一 Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池 ...
- [NOIP2019模拟赛]夹缝
夹缝 问题描述: 二维空间内有两面相对放置的,向无限远延伸的镜子,以镜子的方向及其法向量建立坐标系,我们选定一个法向量方向下面称“上”.在镜子上的整数位置,存在着一些传感器,传感器不影响光线的反射,光 ...
- CF961F k-substring
题意:给你一个字符串(sl<=1e6),问每一个起点到1和终点到sl距离相等的子串的最长不等于串长的border. 标程: #include<cstdio> #include< ...
- MySQL操作表和表记录
目录 操作表 增 列约束 列类型 删 改 修改表名 增加字段 修改字段 删除字段 查 复制表结构 操作表数据 增 删 改 查 操作表 增 创建表语法 创建一个表,多个字段: create table ...
- 前端CSS样式操作
目录 字体和文字 设置标签的宽高 字体属性 文字的属性 文字对齐 text-align 文字装饰 text-decoration 首行缩进 text-indent 背景属性 背景图片 边框 画圆 di ...
- 线段树动态开点——cf1045G
只计算半径小的能看到的半径大的,因为如果计算半径大的看到半径小的,虽然q在其范围内,但是小的不一定能看到大的 那么我们将机器人按照半径降序排序 遍历一次,去查询在[x-r,x+r]范围的,智商在[q- ...
- 洛谷 P1242 新汉诺塔
原题链接 题目描述 设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号.将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A.B.C,这个状态称为初始状态. 现在要求找到一种步数最少的移动方案 ...
- python下使用ElasticSearch
一 什么是 ElasticSearch Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elas ...
- Cordova 常用命令及插件
安装 cordova: npm install -g cordova 创建应用程序 cordova create hello com.example.hello HelloWorld 添加平台 co ...
- VUX的使用方法(以弹出框为例)
一.安装 cnpm install vux --save cnpm install vux-loader --save-dev 二.配置 const vuxLoader = require('vux- ...