Cara mengimplementasikan websocket di tomcat
Protokol Websocket termasuk dalam standar HTML5, dan semakin banyak browser yang secara native mendukung Websocket, yang memungkinkan klien dan server untuk mencapai komunikasi dua arah. Setelah membuat koneksi WebSocket antara klien dan server, pesan sisi server dapat dikirim langsung ke klien, sehingga memecahkan mode respons permintaan tradisional dan menghindari permintaan yang tidak berarti. Misalnya, cara tradisional dapat menggunakan AJAX untuk terus meminta sisi server, sementara Websocket dapat langsung mengirim data ke klien dan klien tidak harus memintanya. Pada saat yang sama, berkat dukungan browser asli, menulis aplikasi klien menjadi lebih nyaman dan tidak perlu mengandalkan plug-in pihak ketiga. Selain itu, protokol Websocket meninggalkan header permintaan rumit dari protokol HTTP, tetapi mentransmisikannya dalam bentuk bingkai data, yang lebih efisien.
Gambar menunjukkan proses komunikasi protokol WebSocket. Pertama, klien akan mengirim paket jabat tangan untuk memberi tahu server bahwa saya ingin meningkatkan ke WebSocket. Saya tidak tahu apakah server Anda setuju. Pada saat ini, jika server mendukung protokol WebSocket, itu akan mengembalikan paket jabat tangan untuk memberi tahu klien bahwa tidak ada masalah dan peningkatan telah dikonfirmasi. Kemudian koneksi Websocket berhasil dibuat, yang mendukung komunikasi dua arah dan mengirim pesan menggunakan format bingkai data dari protokol WebSocket.
Proses jabat tangan perlu dijelaskan. Untuk membuat protokol Websocket kompatibel dengan arsitektur web HTTP Protocol yang ada, jabat tangan protokol WebSocket harus didasarkan pada protokol HTTP. Misalnya, klien akan mengirim pesan HTTP yang mirip dengan yang berikut ini dengan permintaan server untuk meningkatkan ke protokol Websocket. Peningkatan: WebSocket memberi tahu server bahwa saya ingin meningkatkan protokol:
Dapatkan WS: // LocalHost: 8080/Hello http/1.1 Asal: http: // localhost: 8080 Koneksi: Upgrade Host: LocalHost: 8080 SEC-WEBSOCKET-KEKUTI
Pada saat ini, jika server mendukung protokol WebSocket, itu akan mengirim pesan yang menyetujui protokol peningkatan klien. Pesan spesifiknya mirip dengan yang berikut ini, di mana Upgrade: WebSocket memberi tahu klien bahwa saya setuju dengan protokol upgrade Anda:
Http/1.1 101 Websocket Protocol Tanggal Jabat Tangan: Jumat, 10 Feb 2016 17:38:18 Koneksi GMT: Upgrade Server: Kaazing Gateway Upgrade: Websocket SEC-WEBSOCKET-ACCEPT: RLHCKW/SKSO9GAH/ZSFHBATDKRU = RLHCKW/SKSO9GAH/ZSFHBATDKRU =
Setelah menyelesaikan jabat tangan seperti di atas, koneksi protokol HTTP rusak. Selanjutnya, Anda mulai menggunakan protokol WebSocket untuk berkomunikasi antara kedua pihak. Koneksi ini masih merupakan koneksi TCP/IP asli, dan port masih merupakan 80 atau 443 asli.
Berikut adalah contoh sederhana dari penulisan websocket di Tomcat:
kelas publik HelloWebsocketServlet memperluas WebSocketServlet {Private Static List <SpesanBound> SocketList = ArrayList baru <sageInbound> (); streaminbound createwebsocketinbound (string subprotocol, httpservletRequest permintaan) {return baru WebSocketMessageInbound (); } kelas publik WebSocketMessageInbound memperluas MessageInbound {Protected Void Onclose (status int) {super.onclose (status); socketlist.remove (ini); } protected void onopen (wsoutbound outbound) {super.onopen (outbound); socketlist.add (ini); } @Override Protected void OnBinaryMessage (pesan BYTEBUFFER) melempar ioException {} @Override void onTextMessage (pesan charbuffer) melempar ioException {for (messageInbound messageInbound: socketlist) {charbuffer buffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer = charbuffer buffer = charbuffer. Wsoutbound outbound = messageInbound.getWsoutbound (); outbound.writetextMessage (buffer); outbound.flush (); }}}}Servlet ini harus mewarisi WebSocketServlet, dan kemudian membuat kelas WebSocketMessageInbound yang mewarisi pesan. Buat Onclose, Onopen, OnBinaryMessage dan OnTextMessage ke dalam kelas ini untuk menyelesaikan logika setiap peristiwa. OnOpen akan dipanggil ketika koneksi WebSocket dibuat, Onclose akan dipanggil ketika Websocket ditutup, OnBinaryMessage dipanggil ketika data klien diterima dalam mode biner, dan OnTextMessage dipanggil ketika data klien diterima dalam mode teks. Kode di atas mengimplementasikan efek siaran.
Menurut logika pemrosesan di atas, integrasi Websocket Tomcat tidak akan terlalu sulit. Ini berarti bahwa jika Anda menemukan permintaan protokol WebSocket saat memproses permintaan, Anda akan melakukan pemrosesan khusus, menjaga koneksi dan memanggil OnClose, OnOpen, OnBinaryMessage dan OnTextMessage dari metode pesan WebSocketServlet pada waktu yang tepat. Karena Websocket umumnya disarankan untuk digunakan dalam mode NIO, lihat protokol Websocket Integrasi Mode NIO.
Seperti yang ditunjukkan pada gambar, jika koneksi klien dari Websocket diterima oleh penerima dan terdaftar dalam antrian niochannel, komponen Poller terus beristirahat apakah ada niochannel untuk ditangani. Jika demikian, itu akan melalui pipa pemrosesan ke servlet yang mewarisi WebSocketServlet. Metode doget dari WebSocketServlet akan menangani jabat tangan WebSocket dan memberi tahu klien yang kembali untuk menyetujui perjanjian peningkatan. Kemudian, Poller terus bergiliran untuk melepas niochannel terkait. Setelah ditemukan bahwa pipa menggunakan protokol WebSocket digunakan, itu akan memanggil metode pesan untuk menyelesaikan pemrosesan berbagai peristiwa, sehingga mencapai dukungan untuk protokol Websocket.
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!