> For the complete documentation index, see [llms.txt](https://jonathan-zhang.gitbook.io/javascript-steppitguide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jonathan-zhang.gitbook.io/javascript-steppitguide/jin-jie-zhi-shi/13/socketio.md).

# Socket.io库

## Socket.io是什么？ <a href="#socketio-shi-shi-mo" id="socketio-shi-shi-mo"></a>

### 基于事件的实时双向通信库

* 基于websocket协议
* 前后端通过事件进行双向通信
* 配合express，快速开发实时应用

## Socket.io和Ajax区别 <a href="#socketio-he-ajax-qu-bie" id="socketio-he-ajax-qu-bie"></a>

### 基于不同的网络协议

* Ajax基于http协议，单向，实时获取数据只能轮询
* socket.io基于websocket双向通信协议，后端可以主动推送数据
* 现代浏览器均可以支持websocket

![](https://2749833347-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MGDQNxeIHqAznfqMZXF%2Fsync%2Fd818c079506567078ff6be350dd05d25bbce153d.png?generation=1599043658411371\&alt=media)

## Socket.io后端API

### 配合express

* IO = require('socket.io')(http)
* io.on 监听事件
* io.emit 触发事件

## Socket.io前端API

### 配合 express

* import io from 'socket.io-client'
* io.on 监听事件
* io.emit 触发事件

## Socket.io合并HTTP

```javascript
const express = require('express')
const app = express()
//work with express
const server = require('http').Server(app)
const io = require('socket.io')(server)
```
