HTML5 WebSocket技能利用详解(2)

var socket = io.connect('https://www.jb51.net/'); socket.on('connect',function(){ //客户端毗连乐成后发送动静'hello world!' socket.send('hello world!'); }); socket.on('message',function(data){ alert(data); });

毗连乐成后,我们向处事端发送动静hello world!,还为socket注册了message事件,它是send函数对应的吸收动静的事件,当处事端向客户端send动静时,我们就可以在message事件中吸收到发送过来的动静。

处事端向客户端发送动静也可以通过send的方法,示例 - 处事端向客户端发送动静(app.js):

var io = require('scoket.io'); io.on('connection', function (socket) { socket.send('Hello World!'); socket.on('message', function (data) { console.log(data); }) });

与客户端沟通,处事端也需要为socket注册message事件来吸收客户端发送过来的动静。

WebSocket 发送信息

socket.io既然是用来实现通讯的,那么如何发送、吸收信息才是基础。

在socket.io中,emit函数用于发送数据,我们利用send的方法实现了信息的互发,其实send函数只是emit的封装,实际上照旧利用了emit,且看send函数是如何实现的:

function send(){ var args = toArray(arguments); args.unshift('message'); this.emit.apply(this, args); return this; }

在send函数中,获取到本来的参数,并在本来的基本上插入了一个参数message,然后挪用了emit函数。通过send函数的实现,我们也学会了emit函数的用法,它有多个参数,第一个参数是事件名称,在吸收端注册该事件就可以吸收到发送已往的信息,事件名称可以自由界说,在差异的场景下,我们可以界说差异的事件来吸收动静。第二个参数才是发送的数据。相识清楚了事情道理,下面来将send替换成emit函数发送信息:

//app.js io.on('connection',function(socket){ socket.emit('message','毗连乐成!'); socket.on('message',function(data){ }); });

WebSocket 处事端事件

事件监听是实现通讯的基本,因此充实相识socket.io的事件,进修如安在正确的时候利用它们至关重要。在一些要害的的状态下,socket.io可以注册相应的事件,通过事件监听,我们可以在这些事件中作出回响,常用的事件如下:

connection——客户端乐成毗连随处事器。

message——捕捉客户端send信息。。

disconnect——客户端断开毗连。

error——产生错误。

WebSocket 客户端

较处事端而言,客户端提供更多的监听事件,在及时应用中,我们可觉得这些事件注册监听并作出回响,譬喻:connect提示用户毗连乐成,disconnect时提示用户遏制处事等等。

connection——乐成毗连随处事器。

connecting——正在毗连。

disconnect——断开毗连。

connect_failed——毗连失败。

error——毗连错误。

message——监听处事端send的信息。

reconnect_failed——从头毗连失败。

reconnect——从头毗连乐成。

reconnecting——正在重连。

那么客户端socket提倡毗连时的顺序是怎么样的呢?当第一次毗连时,事件触发顺序为: connecting → connect;

当失去毗连时,事件触发顺序为:disconnect → reconnecting → connecting → reconnect → connect。

WebSocket 定名空间

定名空间着实是一个很是实用好用的成果。我们可以通过定名空间,分别出差异的房间,在房间里的广播和通信都不会影响到房间以外的客户端。

那么如何建设房间呢?在处事端,通过of("")的方法来分别新的定名空间:

io.of('chat').on('connection',function(socket){ });

示例中,我们建设一个名为chat的房间,客户端可以通过如下方法毗连到指定的房间:

var socket = io.connect('/chat');

固然毗连到指定的房间,可是我们也可以在处事端操纵,自由的收支房间:

socket.join('chat');//进入chat房间 socket.leave('chat');//分开chat房间

WebSocket 广播动静

在及时应用中,广播是一个不行或缺的成果,socket.io提供两种处事端广播方法。

第一种广播方法可以称之为'全局广播',顾名思义,全局广播就是所有毗连随处事器的客户端城市受到广播的信息:

socket.broadcast.emit('DATA',data);

可是,在实际应用场景中,我们许多时候并不需要所有用户都收到广播信息,有的广播信息只发送给一部门客户端,好比某个房间内里的用户,那么可以利用如下方法:

socket.broadcast.to('chat').emit('DATA',data);

中间件

socket.io提供中间件成果,我们可以通过中间件来对请求举办预处理惩罚,好比身份验证:

io.use(function(socket, next){ if (socket.request.headers.cookie) return next(); next(new Error('Authentication error')); });

示例中展示了通过中间件举办身份验证,当没有cookie的时候抛出异常。

通报参数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsdfxj.html