|
20 | 20 |
|
21 | 21 | Если нам нужно получать поток данных с сервера: неважно, сообщения в чате или же цены для магазина - вот в чем хорош `EventSource`. К тому же, он поддерживает автоматическое переподключение, которое, используя `WebSocket`, нам бы пришлось поддерживать самим. Кроме того, мы используем старый добрый HTTP, а не новый протокол. |
22 | 22 |
|
23 | | -## Getting messages |
| 23 | +## Получение сообщений |
24 | 24 |
|
25 | | -To start receiving messages, we just need to create `new EventSource(url)`. |
| 25 | +Чтобы начать получать данные, нам нужно просто создать `new EventSource(url)`. |
26 | 26 |
|
27 | | -The browser will connect to `url` and keep the connection open, waiting for events. |
| 27 | +Браузер установит соединение с `url` и будет поддерживать его открытым, ожидая события. |
28 | 28 |
|
29 | | -The server should respond with status 200 and the header `Content-Type: text/event-stream`, then keep the connection and write messages into it in the special format, like this: |
| 29 | +Сервер должен ответить со статусом 200 и заголовком `Content-Type: text/event-stream`, затем он должен поддерживать соединение открытым и отправлять сообщения в особом формате: |
30 | 30 |
|
31 | 31 | ``` |
32 | | -data: Message 1 |
| 32 | +data: Сообщение 1 |
33 | 33 |
|
34 | | -data: Message 2 |
| 34 | +data: Сообщение 2 |
35 | 35 |
|
36 | | -data: Message 3 |
37 | | -data: of two lines |
| 36 | +data: Сообщение 3 |
| 37 | +data: в две строки |
38 | 38 | ``` |
39 | 39 |
|
40 | | -- A message text goes after `data:`, the space after the semicolon is optional. |
41 | | -- Messages are delimited with double line breaks `\n\n`. |
42 | | -- To send a line break `\n`, we can immediately one more `data:` (3rd message above). |
| 40 | +- Текст сообщения указывается после `data:`, пробел после двоеточия необязателен. |
| 41 | +- Сообщения разделяются двойным переносом строки `\n\n`. |
| 42 | +- Чтобы разделить сообщение на несколько строк, мы можем отправить несколько `data:` подряд (третее сообщение). |
43 | 43 |
|
44 | | -In practice, complex messages are usually sent JSON-encoded, so line-breaks are encoded within them. |
| 44 | +На практике, сложные сообщения обычно отправляются в формате JSON, указывая переносы строк внутри. |
45 | 45 |
|
46 | | -For instance: |
| 46 | +Например: |
47 | 47 |
|
48 | 48 | ```js |
49 | | -data: {"user":"John","message":"First line*!*\n*/!* Second line"} |
| 49 | +data: {"user":"Джон","message":"Первая строка*!*\n*/!* Вторая строка"} |
50 | 50 | ``` |
51 | 51 |
|
52 | | -...So we can assume that one `data:` holds exactly one message. |
| 52 | +...Так что можно считать, что в каждом `data:` указано ровно одно сообщение. |
53 | 53 |
|
54 | | -For each such message, the `message` event is generated: |
| 54 | +Для каждого сообщения генериуется событие `message`: |
55 | 55 |
|
56 | 56 | ```js |
57 | 57 | let eventSource = new EventSource("/events/subscribe"); |
58 | 58 |
|
59 | 59 | eventSource.onmessage = function(event) { |
60 | | - console.log("New message", event.data); |
61 | | - // will log 3 times for the data stream above |
| 60 | + console.log("Новое сообщение", event.data); |
| 61 | + // этот код вывет в консоль 3 сообщения для данных, описанных выше |
62 | 62 | }; |
63 | 63 |
|
64 | 64 | // or eventSource.addEventListener('message', ...) |
|
0 commit comments