WebSocket
WebSocket 是一种网络通信协议,很多高级功能都需要它。HTTP协议有一个缺陷,通信只能由客户端发起。而Websocket协议在2011年成为国际标准。所有浏览器支持了。它最大的特点是:
服务器可以主动向客户端推送消息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
目前所有的主流Web语言都有对WebSocket做很好的支持,其中也有很多优秀的通讯框架可以任你挑选,因此万万不可畏惧它的存在,除非你真的想用Ajax轮询去解决消息I/O。WebSocket会使得你的消息接受和传递变得极其轻松,最重要的一点是,性能卓绝。WebSocket的建立非常简单
Server API (服务端):https://socket.io/docs/server-api/
Client API (客户端):https://socket.io/docs/client-api/
服务端
Server 类
通过http.createServer创建服务,再通过io = require('socket.io')(server)返回Server类(即:io就是Server类)。
1. 创建Server类(socket.io的初始化实例)
1). Node http server
Server(app.js)
// 引入node.js的内置http模块
var http = require('http')
// 创建http.server实例,返回Server类。
//handler是带有两个参数(req, res)的函数,会自动添加到request事件
var server = http.createServer(handler);
//引入socket.io模块,并进行socket.io的实例初始化
var io = require('socket.io')(server);
//引入Node.js的fs文件系统模块
var fs = require('fs');
//监听 HTTP 服务器的连接function
server.listen(80);
//创建http.server实例的回调函数
handler (req, res) {
// __dirname : Node.js的全局常量,是运行当前文件的目录路径;读取指定目录下的文件
fs.readFile(__dirname + '/index.html', function (err, data) {
//回调函数
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
//如果指定data,则相当于调用response.write(data)
}
// 发送一个响应头(响应头包括:状态码、可选的状态描述、可选的响应头对象)给请求。
res.writeHead(200);
res.end(data);
// res.end()通知服务器,所有响应头和响应主体都已经被发送。
});
}
//对客户端发起连接
io.on('connection', function (socket) {
//socket === 返回的Socket类
})