HTTP tenang dan websocket di aplikasi yang sama?

17

Jika aplikasi sudah terbuka WebSocketuntuk feed langsung, haruskah saya menggunakannya AJAXuntuk komunikasi lain dengan server?

Karena koneksi sudah dibuka, haruskah kita menggunakannya untuk permintaan yang Request/Responsebukan waktu nyata?

Saya lebih suka RESTful HTTPpermintaan karena saya menemukannya lebih mudah di-debug. Anda dapat menggunakan browser dengan url atau ikal untuk menguji apa yang dikembalikan API. Anda tidak perlu menulis kode untuk membuka a WebSocket.

Apakah akan aneh untuk memiliki RESTful HTTP APIdan WebSocketaplikasi yang sama?

Marc
sumber
1
"Anda tidak perlu menulis kode apa pun untuk menguji API" Bisakah Anda menjelaskan ini lebih banyak? Apa yang membuat Anda berpikir Anda tidak perlu menguji API?
Elias Van Ootegem
Alat Pengembang Chrome jika saya tidak salah memungkinkan Anda untuk membuka websocket dan mengirim pesan secara real time
maple_shaft
@ EliasVanOotegem Poin bagus. Maaf itu tidak jelas. Anda masih harus menguji API dengan proyek unit di sisi server. Maksud saya adalah, jika Anda ingin melihat sekilas apa yang akan dihasilkan oleh API, Anda dapat menggunakan broswer dengan url. Anda tidak perlu menulis kode untuk membuka websocket. Saya memperbarui pertanyaan saya.
Marc
@maple_shaft Bagus, tetapi Anda harus berada di halaman dengan WebSocket dibuka ke server.
Marc

Jawaban:

14

Salah satu tujuan desain inti dari Websockets adalah memungkinkan protokol HTTP dan Websocket dikomunikasikan melalui port yang sama. Ini mencapai ini dengan secara eksplisit mengharuskan klien untuk melakukan jabat tangan Websocket dengan permintaan Peningkatan HTTP. Dengan cara ini server dapat menangani koneksi permintaan HTTP standar serta permintaan Peningkatan HTTP yang sekarang ditingkatkan ke koneksi dupleks dua arah persisten.

Jadi ya, ini jelas merupakan use case yang valid, namun apakah Anda HARUS melakukan ini untuk aplikasi spesifik Anda adalah masalah yang sama sekali berbeda. Soket web berguna dan masuk akal jika Anda memiliki skenario bahwa server harus memiliki kemampuan untuk mengirim data yang tidak diminta ke klien (umpan langsung). Protokol HTTP dan layanan REST berguna di mana Anda ingin memblokir permintaan data klien yang sinkron.

Jika persyaratan Anda sedemikian rupa sehingga keduanya masuk akal untuk aplikasi Anda, maka Anda harus menggunakan keduanya. Namun jika interaksi Anda hanya dengan server berbasis umpan langsung maka layanan REST tidak sesuai. Saya pikir kemudahan debugging harus peringkat agak rendah dalam hal pentingnya Kualitas Sistem Atribut yang Anda harus arsitek desain Anda.

maple_shaft
sumber
1
Itu yang saya ingin tahu. Masuk akal untuk menggunakan soket web untuk umpan langsung langsung, tetapi bagaimana dengan operasi CRUD? Lebih masuk akal dalam pikiran saya untuk menggunakan permintaan HTTP standar untuk itu.
Marc
2
@ Mark, saya tidak akan merasa aneh untuk memisahkan operasi CRUD dan masalah waktu-nyata (yang menggunakan HTTP Websockets lainnya) ... tapi ... Saya yakin Anda akan mendapatkan respons yang lebih baik dari server, serta kinerja yang lebih baik, jika Anda menggunakan koneksi persisten (Websocket) untuk semua operasi Anda. Ini benar-benar tergantung pada apa kebutuhan CRUD Anda, tapi saya tidak akan menghindar dari antarmuka CRUD Websocket.
Myst
terbalik! pemula di sini, karena Anda menyebutkan keduanya akan dikomunikasikan melalui port yang sama, jika Anda mengambil mengatakan harga saham dari live streaming dan karena lalu lintas yang padat, aliran terputus selama beberapa menit, bagaimana Anda mendapatkan data di antara atau apa ada strategi untuk mengatasi kasus itu
PirateApp