技术专题!浅谈WebSocket应用
Posted 通付盾移动安全实验室
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了技术专题!浅谈WebSocket应用相关的知识,希望对你有一定的参考价值。
WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
通过WebSocket定义可以了解到:
• WebSocket是一种网络通信协议;
• 建立在TCP协议之上;
• 允许服务端主动向客户端推送数据。
因为HTTP协议只能由客户端主动发起请求。在WebSocket协议之前,我们要实现即时通讯的功能只能使用AJAX轮询(每隔一段时间,就发出一个请求)等方式。轮询的效率是非常低的,而且也非常浪费资源。
轮询就类似于我们追电视剧的时候,每隔一天就需要去APP上查看是否有更新,而WebSocket协议则是APP在电视剧更新的时候主动给我们发送一条消息。
协议标识符是ws(如果加密,则为wss),服务器网址就是URL,
如:ws://example.com/wsapi
wss://secure.example.com/
Websocket使用和HTTP相同的TCP端口,可以绕过大多数防火墙的限制。默认情况下,Websocket协议使用80端口;运行在TLS之上时,默认使用443端口。Websocket通过HTTP/1.1协议的101状态码进行握手。
WebSocket对象作为一个构造函数,用于新建WebSocket实例
var webSocket = new WebSocket('ws://localhost:8080');
WebSocket.readyState属性,只读属性readyState表示连接状态,可以是以下值:
• WebSocket.CONNECTING:值为0,表示正在连接。
• WebSocket.OPEN:值为1,表示连接成功,可以通信了。
• WebSocket.CLOSING:值为2,表示连接正在关闭。
• WebSocket.CLOSED:值为3,表示连接已经关闭,或者打开连接失败。
webSocket.onopen属性,用于指定连接成功后的回调函数。
webSocket.onopen = function(evnt) {
console.log("链接服务器成功!")
};
webSocket.onclose属性,用于指定连接关闭后的回调函数。
webSocket.onclose = function(evnt) {
console.log("与服务器断开了链接!")
}
webSocket.onmessage属性,用于指定收到服务器数据后的回调函数。
webSocket.onmessage = function(event) {
var data = event.data;
// 处理数据
};
webSocket.onerror属性,用于指定报错时的回调函数。
webSocket.onerror = function(evnt) {
// handle error event
};
webSocket.send()方法,用于向服务器发送数据。
webSocket.send("Hello World!");
由于WebSocket是一个协议,服务器具体怎么实现,取决于所用编程语言和框架本身。Node.js、Java、C++、Python 等多种语言都有自己的解决方案。
Java的web一般都依托于servlet容器。其中Tomcat7、Jetty7及以上版本均开始支持WebSocket
本篇文章采用node.js来实现服务端,略过安装node.js的过程,在项目空间下使用命令安装nodejs-websocket模块:
npm install --save nodejs-websocket
服务器端代码如下:
var log = console.log.bind(console);
var ws = require("nodejs-websocket"); //引入websocket模块
var server = ws.createServer(function(conn){
//服务端接收到消息后触发
conn.on("text",function(msg){
log("Recevied:"+msg); // 后台打印接受的信息
// conn.sendText(msg); 向当前连接的客户端发生消息
// 服务器就向全部客户端广播一条消息
server.connections.forEach(function(connection) {
connection.sendText(msg);
});
});
conn.on("close",function(code,reason){
log("Connection closed");
});
conn.on("error",function(err){
log("Handle Error");
log(err);
});
}).listen(8009);
保存为index.js文件,然后运行命令:node index.js,此时服务器运行成功。
客户端提供一个输入框用来输入消息,以及一个向服务端发生消息的按钮:
这时我们就完成了我们的聊天应用了。
互联网产品快速迭代更新,用户行为千变万化,攻击手段同时不断进化,通付盾移动安全实验室长期关注移动应用新技术,紧跟技术潮流变化,陆续推出机器学习、云计算、安卓逆向等移动安全技术,深耕移动安全领域,不断提升移动安全检测、加固、监测等防护能力。未来,我们还将持续推出更多更新技术专题,为移动互联网通过强有力的安全保障。
以上是关于技术专题!浅谈WebSocket应用的主要内容,如果未能解决你的问题,请参考以下文章