实时应用程序:游戏,社交媒体,各种工具,服务和新闻
HTML5的WebSocket开创了实时连接的新标准。 在服务器端,Node.js有一个高效、非阻塞的I/O平台,非常适合处理后端到浏览器JavaScript和WebSocket的任务。
1.WebSocket是浏览器(客户端)和服务器之间的一种特殊的通信通道,他是一个HTML5协议。 2.WebSocket的连接是持久的,他通过在客户端和服务器之间保持双工连接,服务器的更新可以被及时推送给客户端,而不需要在客户端以一定的时间间隔去轮询。
轮询(短期和长期)也可以用来模拟Web应用程序的实时响应。 如:一些高级库(Socket.IO)当WebSocket不可用或用户没有安装最新版本的浏览器时,用的就是轮询。 轮询相对比较简单,只用setInterval()回调和服务器上的结束点就可以实现,轮询没有牵扯到实时通信,每个请求都是独立的
用ws模块建立一个和Node.js服务器通信的本地WebSocket实现: 1.浏览器WebSocket实现 2.用ws模块的Node.js服务器实现
index.html文件
<html> <head> </head> <body> <script type="text/javascript"> // 创建一个对象 var ws = new WebSocket('ws://localhost:3000'); // 连接一建立就触发onopen事件 ws.onopen = function(event) { // 发送消息 ws.send('WebSocket连接成功!'); }; // 得到消息 ws.onmessage = function(event) { console.log('server message: ', event.data) }; // 错误处理 ws.onerror = function(event) { console.log('server error message: ', event.data) }; </script> </body> </html>server.js文件 //引入ws,并初始化服务器
var WebSocketServer = require('ws').Server, wss = new WebSocketServer({port: 3000});//连接建立成功,触发回调函数
wss.on('connection', function(ws) { ws.send('这是服务器发来的数据');//发送消息 ws.on('message', function(message) {//监听message事件 console.log('received: %s', message); }); });用命令$node server.js启动Node.js服务器,然后在浏览器中打开index.html
本地HTML5 WebSocket是一个了不起的技术。 但是,WebSocket是一个协议,一个不断发展的标准,各浏览器的实现有所不同,这点要注意。
连接可能会经常丢失,需要重新建立,建议使用Socket.IO库