Dengan pembangunan berterusan Internet, keperluan masa nyata aplikasi Web semakin tinggi. Protokol HTTP tradisional tidak dapat memenuhi keperluan komunikasi masa nyata kerana ia merupakan kaedah komunikasi permintaan-tindak balas tanpa kewarganegaraan, dan permintaan serta respons ialah sambungan jangka pendek sehala. Oleh itu, untuk memenuhi keperluan komunikasi masa nyata, teknologi Websocket dilahirkan. Websocket ialah teknologi komunikasi masa nyata dupleks penuh, sambungan panjang dan masa nyata yang membolehkan pelanggan dan pelayan mewujudkan sambungan dua hala yang berterusan dan menghantar data sewenang-wenangnya semasa proses komunikasi.
API Java (Antara Muka Pengaturcaraan Aplikasi) sebagai bahasa pembangunan boleh menggunakan Websocket dengan mudah untuk komunikasi masa nyata. API Java menyediakan beberapa kelas alat dan rangka kerja untuk menjadikan pembangunan Websocket lebih mudah dan lebih cekap. Artikel ini akan memperkenalkan cara menggunakan Websocket untuk komunikasi masa nyata dalam pembangunan API Java daripada aspek berikut.
1. Penggunaan asas Websocket
API Java menyediakan standard JSR-356 untuk menyokong teknologi Websocket dalam bahasa Java. Antara muka Websocket dalam API Java menyediakan kaedah asas dan kaedah pengendalian acara yang berkaitan dengan Websocket, dan pembangun boleh menggunakan kaedah ini untuk melaksanakan pelayan dan pelanggan Websocket mereka sendiri.
Untuk membangunkan program Websocket menggunakan Java API, anda perlu menggunakan anotasi javax.websocket.server.ServerEndpoint dan anotasi javax.websocket.OnMessage. Antaranya, anotasi @ServerEndpoint digunakan untuk menentukan URL, kaedah pengekodan (seperti UTF-8), pemproses mesej (iaitu WebSocketHandler) dan maklumat konfigurasi lain perkhidmatan Websocket. Anotasi @OnMessage digunakan untuk mengisytiharkan kaedah pemprosesan mesej jenis tertentu, yang akan dipanggil apabila perkhidmatan Websocket menerima mesej yang dihantar oleh klien. Apabila pelanggan menghantar mesej, mesej akan diekstrak dan dihuraikan, dan kemudian dihantar ke kaedah pemprosesan mesej yang ditentukan untuk diproses. Kaedah pemprosesan mesej boleh menghantar mesej respons melalui objek Sesi Websocket.
Berikut ialah contoh kod mudah:
@ServerEndpoint(value = "/test") public class WebSocketDemo { @OnMessage public String handleMessage(String message, Session session) { System.out.println("Received message: " + message); String echoMsg = "Echo from server: " + message; // 发送响应消息 try { session.getBasicRemote().sendText(echoMsg); } catch (IOException e) { e.printStackTrace(); } return echoMsg; } }
Kod di atas mentakrifkan pengendali WebSocket bernama WebSocketDemo, terikat pada URL "/test". Apabila pelanggan menghantar mesej, kaedah handleMessage WebSocketDemo akan dipanggil dan mesej respons akan dihantar.
2. Gunakan Spring Boot untuk memudahkan pembangunan Websocket
Spring Boot ialah rangka kerja pembangunan berdasarkan rangka Spring, dan ia juga boleh menyokong Websocket dengan baik. Dengan menggunakan Spring Boot, lebih mudah untuk mengintegrasikan teknologi Websocket ke dalam projek API Java, sekali gus mempercepatkan pembangunan aplikasi.
Mula-mula, anda perlu menambah kebergantungan berikut dalam fail pom.xml projek Spring Boot:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
Kemudian, anda perlu mentakrifkan kelas WebSocketHandler dalam aplikasi Spring Boot. Kelas WebSocketHandler perlu mewarisi daripada antara muka WebSocketHandler Spring dan melaksanakan beberapa kaedah asas, seperti kaedah handleTextMessage(), untuk memproses mesej teks yang dihantar oleh pelanggan:
public class MyHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession session, TextMessage message) throws InterruptedException, IOException { String payload = message.getPayload(); // 处理消息 String echoMsg = "Echo from server: " + payload; // 发送响应消息 session.sendMessage(new TextMessage(echoMsg)); } }
Akhir sekali, ia perlu berada dalam fail konfigurasi daripada aplikasi Spring Boot Konfigurasikan WebSocket dalam seperti berikut:
@Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new MyHandler(), "/myHandler").setAllowedOrigins("*"); } }
Dalam kod di atas, kelas MyHandler akan terikat pada URL "/myHandler" dan ditetapkan untuk membenarkan permintaan merentas domain. Anda boleh melaksanakan pengendali WebSocket anda sendiri, mengubah suai URL, atau menggunakan pilihan konfigurasi lain. Menggunakan Spring Boot boleh memberikan banyak kemudahan untuk pembangunan Websocket dan memudahkan proses pembangunan.
3. Gunakan Javascript untuk membangunkan klien Websocket
Semasa menggunakan Java API untuk membangunkan pelayan Websocket, kami perlu membangunkan klien Websocket untuk berkomunikasi dengan pelayan. API websocket Javascript membolehkan kami menggunakan Websocket dengan mudah untuk melaksanakan komunikasi pelanggan dalam aplikasi web.
Untuk menggunakan Websocket dalam Javascript, anda perlu mencipta objek Websocket terlebih dahulu dan nyatakan alamat pelayan Websocket:
var ws = new WebSocket("ws://localhost:8080/test");
Kemudian, anda boleh menggunakan kod berikut untuk menghantar mesej dan menerima balasan mesej daripada pelayan Websocket:
ws.onopen = function() { alert("Websocket连接已建立!"); ws.send("Hello world!"); }; ws.onmessage = function(evt) { var receivedMsg = evt.data; alert("Received message: " + receivedMsg); ws.close(); };
Kod di atas akan bersambung ke pelayan Websocket dengan URL ws://localhost:8080/test dan menghantar mesej yang mengandungi rentetan "Hello world!" Apabila pelayan memproses mesej, ia menghantar mesej respons, dan akhirnya pelanggan menerima mesej respons dan menutup sambungan.
4. Websocket melaksanakan aplikasi seperti bilik sembang
Melalui pengenalan di atas, saya percaya anda telah memahami cara menggunakan Java API untuk pengaturcaraan Websocket dan cara menggunakan klien Javascript untuk berkomunikasi dengannya. Seterusnya, kita boleh cuba menggunakan Websocket untuk melaksanakan aplikasi bilik sembang yang mudah.
Pertama, anda perlu menggunakan Java API untuk melaksanakan pemproses Websocket untuk memproses mesej yang dihantar oleh klien Websocket:
@ServerEndpoint(value = "/chat/{username}") public class ChatServer { private static Set<Session> clients = Collections.synchronizedSet(new HashSet<>()); @OnOpen public void onOpen(Session session, @PathParam("username") String username) { // 将用户加入到聊天室中 clients.add(session); // 广播消息 broadcast(username, " joined the chat room!"); } @OnMessage public void onMessage(String message, Session session, @PathParam("username") String username) { // 广播消息 broadcast(username, ": " + message); } @OnClose public void onClose(Session session, @PathParam("username") String username) { // 将用户从聊天室中移除 clients.remove(session); // 广播消息 broadcast(username, " left the chat room!"); } private static void broadcast(String username, String message) { // 向所有用户广播消息 for (Session client : clients) { try { client.getBasicRemote().sendText(username + message); } catch (IOException e) { e.printStackTrace(); } } } }
以上代码定义了一个名为 ChatServer 的 Websocket 处理器,绑定到 URL “/chat/{username}”。当客户端连接到聊天室时,ChatServer 的 onOpen 方法将被调用,并将客户端添加到 clients 集合中,然后广播一条 “加入聊天室” 的消息。当客户端在聊天室中发送一条消息时,ChatServer 的 onMessage 方法将被调用,并向聊天室的所有客户端广播一条消息。当客户端离开聊天室时,ChatServer 的 onClose 方法将被调用,并将客户端从 clients 集合中移除,然后广播一条 “离开聊天室” 的消息。
然后,需要使用简单的 HTML 和 Javascript 代码实现一个 Websocket 客户端:
<!DOCTYPE html> <html> <head> <title>Chat room</title> </head> <body> <h1>Chat room</h1> <div id="messageArea"></div> <form> <input type="text" id="inputField" onkeydown="return send(event)"> </form> <script> var ws = new WebSocket("ws://localhost:8080/chat/"+prompt("Please enter your name:")); ws.onmessage = function(evt) { var receivedMsg = evt.data; var messageArea = document.getElementById("messageArea"); messageArea.innerHTML += receivedMsg + "<br>"; }; function send(event) { if (event.keyCode == 13) { event.preventDefault(); var inputField = document.getElementById("inputField") ws.send(inputField.value); inputField.value = ""; return false; } } </script> </body> </html>
以上代码将会要求用户输入他们的名称,然后使用 Websocket 连接到 ChatServer 上。用户可以在输入框中输入文本并按下回车键进行发送。当接收到来自 ChatServer 的消息时,HTML 页面将在聊天窗口底部添加一条新的消息。
通过使用 Java API 和 Websocket 技术,我们可以方便地实现高效、实时的 Web 应用程序。无论你是在开发聊天室、在线游戏还是其他实时 Web 应用程序,Websocket 都可以是一个很好的选择。现在开始尝试使用 Websocket,构建自己的实时 Web 应用程序吧!
Atas ialah kandungan terperinci Menggunakan Websocket untuk komunikasi masa nyata dalam pembangunan API Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!