# Engine.IO: the realtime engine
[![Build Status](https://travis-ci.org/socketio/engine.io.svg?branch=master)](http://travis-ci.org/socketio/engine.io)
[![NPM version](https://badge.fury.io/js/engine.io.svg)](http://badge.fury.io/js/engine.io)
`Engine.IO` is the implementation of transport-based
cross-browser/cross-device bi-directional communication layer for
[Socket.IO](http://github.com/socketio/socket.io).
## How to use
### Server
#### (A) Listening on a port
```js
var engine = require('engine.io');
var server = engine.listen(80);
server.on('connection', function(socket){
socket.send('utf 8 string');
socket.send(new Buffer([0, 1, 2, 3, 4, 5])); // binary data
});
```
#### (B) Intercepting requests for a http.Server
```js
var engine = require('engine.io');
var http = require('http').createServer().listen(3000);
var server = engine.attach(http);
server.on('connection', function (socket) {
socket.on('message', function(data){ });
socket.on('close', function(){ });
});
```
#### (C) Passing in requests
```js
var engine = require('engine.io');
var server = new engine.Server();
server.on('connection', function(socket){
socket.send('hi');
});
// …
httpServer.on('upgrade', function(req, socket, head){
server.handleUpgrade(req, socket, head);
});
httpServer.on('request', function(req, res){
server.handleRequest(req, res);
});
```
### Client
```html
<script src="/path/to/engine.io.js"></script>
<script>
var socket = new eio.Socket('ws://localhost/');
socket.on('open', function(){
socket.on('message', function(data){});
socket.on('close', function(){});
});
</script>
```
For more information on the client refer to the
[engine-client](http://github.com/learnboost/engine.io-client) repository.
## What features does it have?
- **Maximum reliability**. Connections are established even in the presence of:
- proxies and load balancers.
- personal firewall and antivirus software.
- for more information refer to **Goals** and **Architecture** sections
- **Minimal client size** aided by:
- lazy loading of flash transports.
- lack of redundant transports.
- **Scalable**
- load balancer friendly
- **Future proof**
- **100% Node.JS core style**
- No API sugar (left for higher level projects)
- Written in readable vanilla JavaScript
## API
### Server
<hr><br>
#### Top-level
These are exposed by `require('engine.io')`:
##### Events
- `flush`
- Called when a socket buffer is being flushed.
- **Arguments**
- `Socket`: socket being flushed
- `Array`: write buffer
- `drain`
- Called when a socket buffer is drained
- **Arguments**
- `Socket`: socket being flushed
##### Properties
- `protocol` _(Number)_: protocol revision number
- `Server`: Server class constructor
- `Socket`: Socket class constructor
- `Transport` _(Function)_: transport constructor
- `transports` _(Object)_: map of available transports
##### Methods
- `()`
- Returns a new `Server` instance. If the first argument is an `http.Server` then the
new `Server` instance will be attached to it. Otherwise, the arguments are passed
directly to the `Server` constructor.
- **Parameters**
- `http.Server`: optional, server to attach to.
- `Object`: optional, options object (see `Server#constructor` api docs below)
The following are identical ways to instantiate a server and then attach it.
```js
var httpServer; // previously created with `http.createServer();` from node.js api.
// create a server first, and then attach
var eioServer = require('engine.io').Server();
eioServer.attach(httpServer);
// or call the module as a function to get `Server`
var eioServer = require('engine.io')();
eioServer.attach(httpServer);
// immediately attach
var eioServer = require('engine.io')(httpServer);
```
- `listen`
- Creates an `http.Server` which listens on the given port and attaches WS
to it. It returns `501 Not Implemented` for regular http requests.
- **Parameters**
- `Number`: port to listen on.
- `Object`: optional, options object
- `Function`: callback for `listen`.
- **Options**
- All options from `Server.attach` method, documented below.
- **Additionally** See Server `constructor` below for options you can pass for creating the new Server
- **Returns** `Server`
- `attach`
- Captures `upgrade` requests for a `http.Server`. In other words, makes
a regular http.Server WebSocket-compatible.
- **Parameters**
- `http.Server`: server to attach to.
- `Object`: optional, options object
- **Options**
- All options from `Server.attach` method, documented below.
- **Additionally** See Server `constructor` below for options you can pass for creating the new Server
- **Returns** `Server` a new Server instance.
<hr><br>
#### Server
The main server/manager. _Inherits from EventEmitter_.
##### Events
- `connection`
- Fired when a new connection is established.
- **Arguments**
- `Socket`: a Socket object
##### Properties
**Important**: if you plan to use Engine.IO in a scalable way, please
keep in mind the properties below will only reflect the clients connected
to a single process.
- `clients` _(Object)_: hash of connected clients by id.
- `clientsCount` _(Number)_: number of connected clients.
##### Methods
- **constructor**
- Initializes the server
- **Parameters**
- `Object`: optional, options object
- **Options**
- `pingTimeout` (`Number`): how many ms without a pong packet to
consider the connection closed (`5000`)
- `pingInterval` (`Number`): how many ms before sending a new ping
packet (`25000`)
- `upgradeTimeout` (`Number`): how many ms before an uncompleted transport upgrade is cancelled (`10000`)
- `maxHttpBufferSize` (`Number`): how many bytes or characters a message
can be, before closing the session (to avoid DoS). Default
value is `10E7`.
- `allowRequest` (`Function`): A function that receives a given handshake
or upgrade request as its first parameter, and can decide whether to
continue or not. The second argument is a function that needs to be
called with the decided information: `fn(err, success)`, where
`success` is a boolean value where false means that the request is
rejected, and err is an error code.
- `transports` (`<Array> String`): transports to allow connections
to (`['polling', 'websocket']`)
- `allowUpgrades` (`Boolean`): whether to allow transport upgrades
(`true`)
- `perMessageDeflate` (`Object|Boolean`): parameters of the WebSocket permessage-deflate extension
(see [ws module](https://github.com/einaros/ws) api docs). Set to `false` to disable. (`true`)
- `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
- `httpCompression` (`Object|Boolean`): parameters of the http compression for the polling transports
(see [zlib](http://nodejs.org/api/zlib.html#zlib_options) api docs). Set to `false` to disable. (`true`)
- `threshold` (`Number`): data is compressed only if the byte size is above this value (`1024`)
- `cookie` (`String|Boolean`): name of the HTTP cookie that
contains the client sid to send as part of handshake response
headers. Set to `false` to not send one. (`io`)
- `cookiePath` (`String|Boolean`): path of the above `cookie`
option. If false, no path will be sent, which means browsers will only send the cookie on the engine.io attached path (`/engine.io`).
Set false to not save io cookie on all requests. (`/`)
- `cookieHttpOnly` (`Boolean`): If `true` HttpOnly io cookie cannot be accessed by client-side APIs, such as JavaScript. (`true`) _This option has no effect if `cookie` or `cookiePath` is set to `false`._
- `wsEngine` (`String`):
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
经典扫雷升级版之即时双人联机对战扫雷小游戏。在线匹配,即时对战,带聊天功能。用nodejs搭建简易的服务端,websocket实现即时通信,代码量六七百行左右,纯原创,简单注释。玩法:输入昵称进入主界面后即可开始匹配,匹配成功后由率先点击匹配的一方先手,轮流扫雷。此版本禁用了标记功能,难度增加了一些。对战同时可以与对手聊天互动。(用命令行cd到项目根目录,输入node index.js,回车即可开启服务,然后进浏览器访问http://localhost:5999) ps:暂时测试没发现bug,不保证没有小问题,如果出现的话各位自行解决吧~
资源推荐
资源详情
资源评论
收起资源包目录
即时双人联机对战扫雷小游戏 (657个子文件)
mime.cmd 170B
base.css 5KB
index.css 3KB
prettify.css 676B
.DS_Store 6KB
.editorconfig 399B
.eslintignore 5B
.eslintrc 560B
.eslintrc 348B
.eslintrc 219B
.eslintrc 219B
.eslintrc 219B
.eslintrc 219B
.eslintrc 219B
.eslintrc 180B
index.js.html 6KB
index.html 3KB
index.html 3KB
index.html 2KB
lcov.info 867B
bg.jpg 1.61MB
socket.io.dev.js 153KB
socket.io.slim.dev.js 131KB
engine.io.js 110KB
socket.io.js 61KB
socket.io.slim.js 52KB
sbcs-data-generated.js 31KB
response.js 26KB
index.js 23KB
parse.js 22KB
WebSocket.js 21KB
dbcs-codec.js 21KB
stringify.js 20KB
qs.js 19KB
socket.js 18KB
XMLHttpRequest.js 18KB
ipaddr.js 18KB
prettify.js 17KB
index.js 17KB
server.js 15KB
index.js 15KB
browser.js 14KB
PerMessageDeflate.js 14KB
application.js 14KB
Receiver.js 13KB
index.js 13KB
manager.js 12KB
request.js 12KB
socket.js 11KB
socket.js 11KB
index.js 11KB
Sender.js 10KB
index.js 10KB
index.js 10KB
index.js 10KB
WebSocketServer.js 9KB
ipaddr.min.js 9KB
utf7.js 9KB
polling-xhr.js 9KB
extend-node.js 8KB
polling.js 8KB
dbcs-data.js 8KB
socket.js 8KB
index.js 8KB
utf8.js 7KB
index.js 6KB
slice-buffer.js 6KB
Extensions.js 6KB
index.js 6KB
stringify.js 6KB
websocket.js 6KB
internal.js 6KB
index.js 6KB
node.js 6KB
index.js 6KB
utils.js 6KB
client.js 6KB
parse.js 6KB
namespace.js 6KB
urlencoded.js 6KB
index.js 6KB
index.js 6KB
browser.js 6KB
browser.js 6KB
browser.js 6KB
browser.js 6KB
browser.js 6KB
index.js 5KB
index.js 5KB
utils.js 5KB
mediaType.js 5KB
index.js 5KB
index.js 5KB
sorter.js 5KB
utf16.js 5KB
polling.js 5KB
index.js 5KB
debug.js 5KB
debug.js 5KB
debug.js 5KB
共 657 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
熙決
- 粉丝: 2
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功