今天小编给大家分享一下node.js中如何使用socket.io实现一个实时通讯应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。WebSocket概念不同于HTTP半双工协议,WebSocket是基于TCP 连接的全双工协议,支持客户端服务端双向通信。WebSocket
使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。在WebSocket API
中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。实现原生实现WebSocket对象一共支持四个消息 onopen, onmessage, onclose和onerror。建立连接通过javascript可以快速的建立一个WebSocket连接:以上代码中的第一个参数url
, 指定连接的URL。第二个参数protocol
是可选的,指定了可接受的子协议。同http协议使用http://
开头一样,WebSocket协议的URL使用ws://
开头,另外安全的WebSocket协议使用wss://
开头。当Browser和WebSocketServer连接成功后,会触发onopen消息。如果连接失败,发送、接收数据失败或者处理数据出现错误,browser会触发onerror消息。当Browser接收到WebSocketServer端发送的关闭连接请求时,就会触发onclose消息。收发消息当Browser接收到WebSocketServer发送过来的数据时,就会触发onmessage消息,参数evt中包含server传输过来的数据。send用于向服务端发送消息。socketWebSocket是跟随HTML5一同提出的,所以在兼容性上存在问题,这时一个非常好用的库就登场了——Socket.io。socket.io封装了websocket,同时包含了其它的连接方式,你在任何浏览器里都可以使用socket.io来建立异步的连接。socket.io包含了服务端和客户端的库,如果在浏览器中使用了socket.io的js,服务端也必须同样适用。socket.io是基于 Websocket 的Client-Server 实时通信库。socket.io底层是基于engine.io这个库。engine.io为 socket.io 提供跨浏览器/跨设备的双向通信的底层库。engine.io使用了 Websocket 和 XHR 方式封装了一套 socket 协议。在低版本的浏览器中,不支持Websocket,为了兼容使用长轮询(polling)替代。API文档Socket.io允许你触发或响应自定义的事件,除了connect,message,disconnect这些事件的名字不能使用之外,你可以触发任何自定义的事件免费云主机域名名称。建立连接消息收发一、发送数据二、接收数据断开连接一、全部断开连接二、某个客户端断开与服务端的链接room和namespace有时候websocket有如下的使用场景:1.服务端发送的消息有分类,不同的客户端需要接收的分类不同;2.服务端并不需要对所有的客户端都发送消息,只需要针对某个特定群体发送消息;针对这种使用场景,socket中非常实用的namespace和room就上场了。先来一张图看看namespace与room之间的关系:namespace服务端客户端room客户端服务端用socket.io实现一个实时接收信息的例子终于来到应用的阶段啦,服务端用node.js
模拟了服务端接口。以下的例子都在本地服务器中实现。服务端先来看看服务端,先来开启一个服务,安装express
和socket.io
安装依赖构建node服务器客户端核心代码——index.html(向服务端发送数据)核心代码——message.html(从服务端接收数据)效果实时通讯效果
客户端全部断开连接
某客户端断开连接
namespace应用
加入房间
离开房间
框架中的应用分析webSocket协议Headers请求包请求包说明:必须是有效的http request 格式;HTTP request method 必须是GET,协议应不小于1.1 如: Get / HTTP/1.1;必须包括Upgrade头域,并且其值为“websocket”,用于告诉服务器此连接需要升级到websocket;必须包括”Connection” 头域,并且其值为“Upgrade”;必须包括”Sec-WebSocket-Key”头域,其值采用base64编码的随机16字节长的字符序列;如果请求来自浏览器客户端,还必须包括Origin头域 。 该头域用于防止未授权的跨域脚本攻击,服务器可以从Origin决定是否接受该WebSocket连接;必须包括“Sec-webSocket-Version”头域,是当前使用协议的版本号,当前值必须是13;可能包括“Sec-WebSocket-Protocol”,表示client(应用程序)支持的协议列表,server选择一个或者没有可接受的协议响应之;可能包括“Sec-WebSocket-Extensions”, 协议扩展, 某类协议可能支持多个扩展,通过它可以实现协议增强;可能包括任意其他域,如cookie.应答包应答包说明:必须包括Upgrade头域,并且其值为“websocket”;必须包括Connection头域,并且其值为“Upgrade”;必须包括Sec-WebSocket-Accept头域,其值是将请求包“Sec-WebSocket-Key”的值,与”258EAFA5-E914-47DA-95CA-C5AB0DC85B11″这个字符串进行拼接,然后对拼接后的字符串进行sha-1运算,再进行base64编码,就是“Sec-WebSocket-Accept”的值;应答包中冒号后面有一个空格;最后需要两个空行作为应答包结束。请求数据EIO:3 表示使用的是engine.io协议版本3transport 表示传输采用的类型sid: session id (String)FramesWebSocket协议使用帧(Frame)收发数据,在控制台->Frames中可以查看发送的帧数据。其中帧数据前的数字代表什么意思呢?这是 Engine.io协议,其中的数字是数据包编码:
今天小编给大家分享一下怎么使用C++代码实现学生信息管理系统的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。编译环境:Microsoft Visu…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。