RESTful HTTP та websocket в одному додатку?


17

Якщо програма вже відкрита WebSocketдля прямих каналів, чи слід використовувати її AJAXдля інших комунікацій із сервером?

Оскільки з'єднання вже відкрито, чи слід використовувати його для запитів, які є, Request/Responseа не в реальному часі?

Я віддаю перевагу RESTful HTTPзапитам, тому що мені здається, що їх простіше налагодити. Ви можете скористатися веб-переглядачем з URL-адресами або завитками для перевірки повернення API. Вам не потрібно писати код, щоб відкрити WebSocket.

Було б дивно мати RESTful HTTP APIта WebSocketв одній програмі?


1
"Вам не потрібно писати жодного коду, щоб перевірити API" Чи могли б ви пояснити це трохи більше? Чому ви вважаєте, що вам не потрібно тестувати API?
Elias Van Ootegem

Інструменти для розробників Chrome, якщо я не помиляюся, дозволяють відкривати веб-розетку та надсилати повідомлення в режимі реального часу
maple_shaft

@EliasVanOotegem Добре. Вибачте, що було не ясно. Вам все одно доведеться протестувати API з одиничним проектом на стороні сервера. Що я маю на увазі, якщо ви хочете швидко переглянути те, що повертався б API, ви можете скористатись браузером із URL-адресою. Вам не потрібно писати код, щоб відкрити веб-розетку. Я оновив своє запитання.
Марк

@maple_shaft Це добре, але вам потрібно бути на сторінці з відкритим до сервера WebSocket.
Марк

Відповіді:


14

Однією з основних цілей дизайну Websockets є те, що він дозволяє передавати і протоколи HTTP, і Websocket через один і той же порт. Це досягається, явно вимагаючи від клієнта виконання рукостискання Websocket із запитом на оновлення HTTP. Таким чином, сервер може обробляти стандартне з'єднання HTTP-запиту, а також запит на оновлення HTTP, який тепер оновлений до постійного двостороннього двостороннього з'єднання.

Так, так, це, безумовно, справедливий випадок використання, однак, чи потрібно ви робити це для вашої конкретної програми, цілком інша справа. Веб-розетки є корисними та мають сенс, коли у вас є сценарії, згідно з якими сервер повинен мати можливість надсилати клієнту небажані дані (живі канали). Протокол HTTP та послуги REST корисні там, де потрібно блокувати синхронне отримання клієнтом даних.

Якщо ваші вимоги такі, що обидва з них мають сенс для вашої заявки, тоді вам слід використовувати обоє. Якщо ваша єдина взаємодія з сервером - це пряма трансляція, то послуги REST не підходять. Я думаю, що простота налагодження повинна мати досить низьку важливість з точки зору атрибутів якості системи, на які ви повинні архітектувати свій дизайн.


1
Ось що мені було цікаво. Є сенс використовувати веб-розетки для прямого ефіру в режимі реального часу, але як бути з операціями CRUD? Має сенс більше використовувати для них стандартний HTTP-запит.
Марк

2
@Marc, мені не було б дивно розділяти операції CRUD та проблеми в режимі реального часу (одні використовують HTTP, інші Websockets) ... але ... я вірю, що ви отримаєте кращу реакцію з боку сервера, а також краща продуктивність, якщо ви використовуєте стійке з'єднання (Websocket) для всіх своїх операцій. Це дійсно залежить від ваших потреб CRUD, але я б не цурався інтерфейсу CRUD Websocket.
Міст

прихильне! новачок тут, оскільки ви згадали про те, що обидва повинні повідомлятися через один і той же порт, якщо ви отримуєте, скажімо, ціни на акції від прямого потоку і через інтенсивний трафік, потік відключається на кілька хвилин, як би ви отримали дані між ними або чим Існують стратегії для вирішення цього випадку
PirateApp
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.