root / HServer / 00.Server / 00.Program / node_modules / socket.io / Readme.md
이력 | 보기 | 이력해설 | 다운로드 (16.1 KB)
1 | 39 | HKM | |
---|---|---|---|
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) |