root / HServer / 00.Server / 00.Program / node_modules / socket.io / Readme.md
이력 | 보기 | 이력해설 | 다운로드 (16.1 KB)
1 |
|
---|---|
2 |
# socket.io |
3 |
|
4 |
[](#backers) [](#sponsors) |
5 |
[](https://travis-ci.org/socketio/socket.io) |
6 |
[](https://david-dm.org/socketio/socket.io) |
7 |
[](https://david-dm.org/socketio/socket.io#info=devDependencies) |
8 |
[](https://www.npmjs.com/package/socket.io) |
9 |
 |
10 |
[](https://slackin-socketio.now.sh) |
11 |
|
12 |
## Features |
13 |
|
14 |
Socket.IO enables real-time bidirectional event-based communication. It consists in: |
15 |
|
16 |
- a Node.js server (this repository) |
17 |
- a [Javascript client library](https://github.com/socketio/socket.io-client) for the browser (or a Node.js client) |
18 |
|
19 |
Some implementations in other languages are also available: |
20 |
|
21 |
- [Java](https://github.com/socketio/socket.io-client-java) |
22 |
- [C++](https://github.com/socketio/socket.io-client-cpp) |
23 |
- [Swift](https://github.com/socketio/socket.io-client-swift) |
24 |
|
25 |
Its main features are: |
26 |
|
27 |
#### Reliability |
28 |
|
29 |
Connections are established even in the presence of: |
30 |
- proxies and load balancers. |
31 |
- personal firewall and antivirus software. |
32 |
|
33 |
For this purpose, it relies on [Engine.IO](https://github.com/socketio/engine.io), which first establishes a long-polling connection, then tries to upgrade to better transports that are "tested" on the side, like WebSocket. Please see the [Goals](https://github.com/socketio/engine.io#goals) section for more information. |
34 |
|
35 |
#### Auto-reconnection support |
36 |
|
37 |
Unless instructed otherwise a disconnected client will try to reconnect forever, until the server is available again. Please see the available reconnection options [here](https://github.com/socketio/socket.io-client/blob/master/docs/API.md#new-managerurl-options). |
38 |
|
39 |
#### Disconnection detection |
40 |
|
41 |
An heartbeat mechanism is implemented at the Engine.IO level, allowing both the server and the client to know when the other one is not responding anymore. |
42 |
|
43 |
That functionality is achieved with timers set on both the server and the client, with timeout values (the `pingInterval` and `pingTimeout` parameters) shared during the connection handshake. Those timers require any subsequent client calls to be directed to the same server, hence the `sticky-session` requirement when using multiples nodes. |
44 |
|
45 |
#### Binary support |
46 |
|
47 |
Any serializable data structures can be emitted, including: |
48 |
|
49 |
- [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) and [Blob](https://developer.mozilla.org/en-US/docs/Web/API/Blob) in the browser |
50 |
- [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer) and [Buffer](https://nodejs.org/api/buffer.html) in Node.js |
51 |
|
52 |
#### Simple and convenient API |
53 |
|
54 |
Sample code: |
55 |
|
56 |
```js |
57 |
io.on('connection', function(socket){ |
58 |
socket.emit('request', /* */); // emit an event to the socket |
59 |
io.emit('broadcast', /* */); // emit an event to all connected sockets |
60 |
socket.on('reply', function(){ /* */ }); // listen to the event |
61 |
}); |
62 |
``` |
63 |
|
64 |
#### Cross-browser |
65 |
|
66 |
Browser support is tested in Saucelabs: |
67 |
|
68 |
[](https://saucelabs.com/u/socket) |
69 |
|
70 |
#### Multiplexing support |
71 |
|
72 |
In order to create separation of concerns within your application (for example per module, or based on permissions), Socket.IO allows you to create several `Namespaces`, which will act as separate communication channels but will share the same underlying connection. |
73 |
|
74 |
#### Room support |
75 |
|
76 |
Within each `Namespace`, you can define arbitrary channels, called `Rooms`, that sockets can join and leave. You can then broadcast to any given room, reaching every socket that has joined it. |
77 |
|
78 |
This is a useful feature to send notifications to a group of users, or to a given user connected on several devices for example. |
79 |
|
80 |
|
81 |
**Note:** Socket.IO is not a WebSocket implementation. Although Socket.IO indeed uses WebSocket as a transport when possible, it adds some metadata to each packet: the packet type, the namespace and the ack id when a message acknowledgement is needed. That is why a WebSocket client will not be able to successfully connect to a Socket.IO server, and a Socket.IO client will not be able to connect to a WebSocket server (like `ws://echo.websocket.org`) either. Please see the protocol specification [here](https://github.com/socketio/socket.io-protocol). |
82 |
|
83 |
## Installation |
84 |
|
85 |
```bash |
86 |
npm install socket.io --save |
87 |
``` |
88 |
|
89 |
## How to use |
90 |
|
91 |
The following example attaches socket.io to a plain Node.JS |
92 |
HTTP server listening on port `3000`. |
93 |
|
94 |
```js |
95 |
var server = require('http').createServer(); |
96 |
var io = require('socket.io')(server); |
97 |
io.on('connection', function(client){ |
98 |
client.on('event', function(data){}); |
99 |
client.on('disconnect', function(){}); |
100 |
}); |
101 |
server.listen(3000); |
102 |
``` |
103 |
|
104 |
### Standalone |
105 |
|
106 |
```js |
107 |
var io = require('socket.io')(); |
108 |
io.on('connection', function(client){}); |
109 |
io.listen(3000); |
110 |
``` |
111 |
|
112 |
### In conjunction with Express |
113 |
|
114 |
Starting with **3.0**, express applications have become request handler |
115 |
functions that you pass to `http` or `http` `Server` instances. You need |
116 |
to pass the `Server` to `socket.io`, and not the express application |
117 |
function. Also make sure to call `.listen` on the `server`, not the `app`. |
118 |
|
119 |
```js |
120 |
var app = require('express')(); |
121 |
var server = require('http').createServer(app); |
122 |
var io = require('socket.io')(server); |
123 |
io.on('connection', function(){ /* … */ }); |
124 |
server.listen(3000); |
125 |
``` |
126 |
|
127 |
### In conjunction with Koa |
128 |
|
129 |
Like Express.JS, Koa works by exposing an application as a request |
130 |
handler function, but only by calling the `callback` method. |
131 |
|
132 |
```js |
133 |
var app = require('koa')(); |
134 |
var server = require('http').createServer(app.callback()); |
135 |
var io = require('socket.io')(server); |
136 |
io.on('connection', function(){ /* … */ }); |
137 |
server.listen(3000); |
138 |
``` |
139 |
|
140 |
## Documentation |
141 |
|
142 |
Please see the documentation [here](/docs/README.md). Contributions are welcome! |
143 |
|
144 |
## Debug / logging |
145 |
|
146 |
Socket.IO is powered by [debug](https://github.com/visionmedia/debug). |
147 |
In order to see all the debug output, run your app with the environment variable |
148 |
`DEBUG` including the desired scope. |
149 |
|
150 |
To see the output from all of Socket.IO's debugging scopes you can use: |
151 |
|
152 |
``` |
153 |
DEBUG=socket.io* node myapp |
154 |
``` |
155 |
|
156 |
## Testing |
157 |
|
158 |
``` |
159 |
npm test |
160 |
``` |
161 |
This runs the `gulp` task `test`. By default the test will be run with the source code in `lib` directory. |
162 |
|
163 |
Set the environmental variable `TEST_VERSION` to `compat` to test the transpiled es5-compat version of the code. |
164 |
|
165 |
The `gulp` task `test` will always transpile the source code into es5 and export to `dist` first before running the test. |
166 |
|
167 |
|
168 |
## Backers |
169 |
|
170 |
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/socketio#backer)] |
171 |
|
172 |
<a href="https://opencollective.com/socketio/backer/0/website" target="_blank"><img src="https://opencollective.com/socketio/backer/0/avatar.svg"></a> |
173 |
<a href="https://opencollective.com/socketio/backer/1/website" target="_blank"><img src="https://opencollective.com/socketio/backer/1/avatar.svg"></a> |
174 |
<a href="https://opencollective.com/socketio/backer/2/website" target="_blank"><img src="https://opencollective.com/socketio/backer/2/avatar.svg"></a> |
175 |
<a href="https://opencollective.com/socketio/backer/3/website" target="_blank"><img src="https://opencollective.com/socketio/backer/3/avatar.svg"></a> |
176 |
<a href="https://opencollective.com/socketio/backer/4/website" target="_blank"><img src="https://opencollective.com/socketio/backer/4/avatar.svg"></a> |
177 |
<a href="https://opencollective.com/socketio/backer/5/website" target="_blank"><img src="https://opencollective.com/socketio/backer/5/avatar.svg"></a> |
178 |
<a href="https://opencollective.com/socketio/backer/6/website" target="_blank"><img src="https://opencollective.com/socketio/backer/6/avatar.svg"></a> |
179 |
<a href="https://opencollective.com/socketio/backer/7/website" target="_blank"><img src="https://opencollective.com/socketio/backer/7/avatar.svg"></a> |
180 |
<a href="https://opencollective.com/socketio/backer/8/website" target="_blank"><img src="https://opencollective.com/socketio/backer/8/avatar.svg"></a> |
181 |
<a href="https://opencollective.com/socketio/backer/9/website" target="_blank"><img src="https://opencollective.com/socketio/backer/9/avatar.svg"></a> |
182 |
<a href="https://opencollective.com/socketio/backer/10/website" target="_blank"><img src="https://opencollective.com/socketio/backer/10/avatar.svg"></a> |
183 |
<a href="https://opencollective.com/socketio/backer/11/website" target="_blank"><img src="https://opencollective.com/socketio/backer/11/avatar.svg"></a> |
184 |
<a href="https://opencollective.com/socketio/backer/12/website" target="_blank"><img src="https://opencollective.com/socketio/backer/12/avatar.svg"></a> |
185 |
<a href="https://opencollective.com/socketio/backer/13/website" target="_blank"><img src="https://opencollective.com/socketio/backer/13/avatar.svg"></a> |
186 |
<a href="https://opencollective.com/socketio/backer/14/website" target="_blank"><img src="https://opencollective.com/socketio/backer/14/avatar.svg"></a> |
187 |
<a href="https://opencollective.com/socketio/backer/15/website" target="_blank"><img src="https://opencollective.com/socketio/backer/15/avatar.svg"></a> |
188 |
<a href="https://opencollective.com/socketio/backer/16/website" target="_blank"><img src="https://opencollective.com/socketio/backer/16/avatar.svg"></a> |
189 |
<a href="https://opencollective.com/socketio/backer/17/website" target="_blank"><img src="https://opencollective.com/socketio/backer/17/avatar.svg"></a> |
190 |
<a href="https://opencollective.com/socketio/backer/18/website" target="_blank"><img src="https://opencollective.com/socketio/backer/18/avatar.svg"></a> |
191 |
<a href="https://opencollective.com/socketio/backer/19/website" target="_blank"><img src="https://opencollective.com/socketio/backer/19/avatar.svg"></a> |
192 |
<a href="https://opencollective.com/socketio/backer/20/website" target="_blank"><img src="https://opencollective.com/socketio/backer/20/avatar.svg"></a> |
193 |
<a href="https://opencollective.com/socketio/backer/21/website" target="_blank"><img src="https://opencollective.com/socketio/backer/21/avatar.svg"></a> |
194 |
<a href="https://opencollective.com/socketio/backer/22/website" target="_blank"><img src="https://opencollective.com/socketio/backer/22/avatar.svg"></a> |
195 |
<a href="https://opencollective.com/socketio/backer/23/website" target="_blank"><img src="https://opencollective.com/socketio/backer/23/avatar.svg"></a> |
196 |
<a href="https://opencollective.com/socketio/backer/24/website" target="_blank"><img src="https://opencollective.com/socketio/backer/24/avatar.svg"></a> |
197 |
<a href="https://opencollective.com/socketio/backer/25/website" target="_blank"><img src="https://opencollective.com/socketio/backer/25/avatar.svg"></a> |
198 |
<a href="https://opencollective.com/socketio/backer/26/website" target="_blank"><img src="https://opencollective.com/socketio/backer/26/avatar.svg"></a> |
199 |
<a href="https://opencollective.com/socketio/backer/27/website" target="_blank"><img src="https://opencollective.com/socketio/backer/27/avatar.svg"></a> |
200 |
<a href="https://opencollective.com/socketio/backer/28/website" target="_blank"><img src="https://opencollective.com/socketio/backer/28/avatar.svg"></a> |
201 |
<a href="https://opencollective.com/socketio/backer/29/website" target="_blank"><img src="https://opencollective.com/socketio/backer/29/avatar.svg"></a> |
202 |
|
203 |
|
204 |
## Sponsors |
205 |
|
206 |
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/socketio#sponsor)] |
207 |
|
208 |
<a href="https://opencollective.com/socketio/sponsor/0/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/0/avatar.svg"></a> |
209 |
<a href="https://opencollective.com/socketio/sponsor/1/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/1/avatar.svg"></a> |
210 |
<a href="https://opencollective.com/socketio/sponsor/2/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/2/avatar.svg"></a> |
211 |
<a href="https://opencollective.com/socketio/sponsor/3/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/3/avatar.svg"></a> |
212 |
<a href="https://opencollective.com/socketio/sponsor/4/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/4/avatar.svg"></a> |
213 |
<a href="https://opencollective.com/socketio/sponsor/5/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/5/avatar.svg"></a> |
214 |
<a href="https://opencollective.com/socketio/sponsor/6/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/6/avatar.svg"></a> |
215 |
<a href="https://opencollective.com/socketio/sponsor/7/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/7/avatar.svg"></a> |
216 |
<a href="https://opencollective.com/socketio/sponsor/8/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/8/avatar.svg"></a> |
217 |
<a href="https://opencollective.com/socketio/sponsor/9/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/9/avatar.svg"></a> |
218 |
<a href="https://opencollective.com/socketio/sponsor/10/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/10/avatar.svg"></a> |
219 |
<a href="https://opencollective.com/socketio/sponsor/11/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/11/avatar.svg"></a> |
220 |
<a href="https://opencollective.com/socketio/sponsor/12/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/12/avatar.svg"></a> |
221 |
<a href="https://opencollective.com/socketio/sponsor/13/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/13/avatar.svg"></a> |
222 |
<a href="https://opencollective.com/socketio/sponsor/14/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/14/avatar.svg"></a> |
223 |
<a href="https://opencollective.com/socketio/sponsor/15/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/15/avatar.svg"></a> |
224 |
<a href="https://opencollective.com/socketio/sponsor/16/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/16/avatar.svg"></a> |
225 |
<a href="https://opencollective.com/socketio/sponsor/17/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/17/avatar.svg"></a> |
226 |
<a href="https://opencollective.com/socketio/sponsor/18/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/18/avatar.svg"></a> |
227 |
<a href="https://opencollective.com/socketio/sponsor/19/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/19/avatar.svg"></a> |
228 |
<a href="https://opencollective.com/socketio/sponsor/20/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/20/avatar.svg"></a> |
229 |
<a href="https://opencollective.com/socketio/sponsor/21/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/21/avatar.svg"></a> |
230 |
<a href="https://opencollective.com/socketio/sponsor/22/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/22/avatar.svg"></a> |
231 |
<a href="https://opencollective.com/socketio/sponsor/23/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/23/avatar.svg"></a> |
232 |
<a href="https://opencollective.com/socketio/sponsor/24/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/24/avatar.svg"></a> |
233 |
<a href="https://opencollective.com/socketio/sponsor/25/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/25/avatar.svg"></a> |
234 |
<a href="https://opencollective.com/socketio/sponsor/26/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/26/avatar.svg"></a> |
235 |
<a href="https://opencollective.com/socketio/sponsor/27/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/27/avatar.svg"></a> |
236 |
<a href="https://opencollective.com/socketio/sponsor/28/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/28/avatar.svg"></a> |
237 |
<a href="https://opencollective.com/socketio/sponsor/29/website" target="_blank"><img src="https://opencollective.com/socketio/sponsor/29/avatar.svg"></a> |
238 |
|
239 |
|
240 |
## License |
241 |
|
242 |
[MIT](LICENSE) |