服务端:

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的基本使用的更多相关文章

  1. 在web浏览器上显示室内温度(nodeJs+arduino+socket.io)

    上次的nodejs操作arduino入门篇中实现了如何连接arduino.这次我们来实现通过arduino测量室内温度并在浏览器上显示出来. [所需材料] 硬件:LM35温度传感器,arduino u ...

  2. Node学习笔记(三):基于socket.io web版你画我猜(二)

    上一篇基础实现的功能是客户端canvas作图,导出dataURL从而实现图片信息推送,下面具体讲下服务端的配置及客户端的配置同步 首先先画一个流程图,讲下大概思路 <canvas id=&quo ...

  3. node.js+socket.io配置详解

    由于我是在win7的环境下,在这里就以win7系统为例进行讲解了. 首先需要在nodejs官网下载最新版的node.js,下载完毕直接安装即可,安装成功后在cmd命令行中执行node指令,如下结果就说 ...

  4. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  5. socket.io简单入门(一.实现简单的图表推送)

    引子:随着nodejs蓬勃发展,虽然主要业务系统因为架构健壮性不会选择nodejs座位应用服务器.但是大量的内部系统却可以使用nodejs试水,大量的前端开发人员转入全堆开发也是一个因素. 研究本例主 ...

  6. websocket与socket.io

    什么是Websocket? Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中.WebSocke ...

  7. socket.io安装部署

    需要node.js环境 创建package.json npm init 下载相关依赖 npm install --save express@4.10.2npm会在当前目录下载所需要的依赖到node_m ...

  8. Node.js、Express、Socket.io 入门

    前言 周末断断续续的写了第一个socket.io Demo.初次接触socket.io是从其官网看到的,看着get started做了一遍,根据官网的Demo能提供简单的服务端和客户端通讯. 这个De ...

  9. socket.io,io=Manager(source, opts)

    原文:http://www.cnblogs.com/xiezhengcai/p/3968067.html 当我们在使用 var socket = io("ws://103.31.201.15 ...

  10. socket.io,命名空间

    原文:http://www.cnblogs.com/xiezhengcai/p/3966263.html 命名空间 在api部分我们说io.connect('ws://103.31.201.154:5 ...

随机推荐

  1. (转)NodeJS - 第一个应用程序Hello World

    安装NodeJs 在创建实际的“Hello,World!”应用之前,我们应该先安装NodeJS,安装NodeJS可以访问NodeJS官网,下载相应系统的NodeJS的安装包,进行安装. 程序组件 关于 ...

  2. Linux-c 线程锁

      typedef struct _my_mutex { pthread_mutex_t mutex; //互斥锁 pthread_mutexattr_t mta; //互斥锁属性 } my_mute ...

  3. C++: Basic knowledge Part 1

    1.在 C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”? 首先,extern 是 C/C++ 语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数 ...

  4. React在componentWillMount中请求接口数据结束后再执行render

    1.在getInitialState中初始化isloading,初始值false getInitialState() { return { editionid: '', isloading:false ...

  5. xcart-子分类/语言不显示

    由于数据库的版本不同,表名会区分大小写的情况,这样就导致xcart语言相关的信息显示不出来,此时只需更改根目录下的init.php文件,如下: 改成小写的就OK了.

  6. leetcode-142-环形链表②

    题目描述: 方法一:O(n) O(n) # Definition for singly-linked list. # class ListNode(object): # def __init__(se ...

  7. 「题解」:[组合数学][DP]:地精部落

    拿到这道题秒懂题意:波动序列. 然鹅不会打.想了一节课,想打纯组合数学,结果找不到规律. 想的是先假设拍出一个序列,然后交换其中的元素求组合, 无奈没啥规律可循,显然不能一口气求出来(我说的是我没办法 ...

  8. intrinsicContentSize和Content Hugging Priority

    Mgen | 首页 | | 发新文章 | 联系 | 订阅  | 管理 iOS: 在代码中使用Autolayout (2) - intrinsicContentSize和Content Hugging ...

  9. csdn阅读更多自动展开插件

    点击获取 当然也可以自己写脚本.写js.

  10. 用区块链技术做一个 不可被修改的 恋爱记录 app 我叫<<誓言>>

    区块链技术 具有不可篡改,去中心化,共识机制等优秀的特性, 都用来做 代币钱包什么的.我觉得完全是浪费. 我的想法是用哪个区块做一个dapp 1 里面写着每个人的恋爱记录,爱情宣言. 2 一个人一生 ...