socket.io 简单使用

2017年06月06日

Web Sockets 的目标是在一个单独的持久连接上提供全双工、双向通道。它能够在客户端和服务器之前发送非常少量的数据,而不必担心 HTTP 那样字节级别的开销。

socket.io 是 Node 的一个库,提供实时应用跨平台实时通信。

安装

npm install socket.io

使用

server

 1var app = require('http').createServer(handler);
 2var io = require('socket.io')(app);
 3var fs = require('fs');
 4
 5app.listen(80);
 6
 7function handler(req, res) {
 8  fs.readFile(__dirname + '/index.html', function (err, data) {
 9    if (err) {
10      res.writeHead(500);
11      return res.end('Error loading index.html');
12    }
13    res.writeHead(200);
14    res.end(data);
15  });
16}
17
18io.on('connection', function (socket) {
19  socket.emit('message', 'hello');
20  socket.on('client message', function (data) {
21    console.log(data);
22  });
23});

client

1<script src="/socket.io/socket.io.js"></script>
2<script>
3  var socket = io('http://localhost');
4  socket.on('message', function (data) {
5    console.log(data);
6    socket.emit('client message', 'hi');
7  });
8</script>

可双向传递及监测信息。

核心

你可以看到不管是服务器还是客户端都有 emit 和 on 这两个函数,可以说 socket.io 的核心就是这两个函数了,通过 emit 和 on 可以轻松地实现服务器与客户端之间的双向通信。

socket.io 提供了三种默认的事件(客户端和服务器都有):connect 、message 、disconnect 。当与对方建立连接后自动触发 connect 事件,当收到对方发来的数据后触发 message 事件(通常为 socket.send() 触发),当对方关闭连接后触发 disconnect 事件。

此外,socket.io 还支持自定义事件,毕竟以上三种事件应用范围有限,正是通过这些自定义的事件才实现了丰富多彩的通信。

最后,需要注意的是,在服务器端区分以下三种情况:

参考