Dalam aplikasi Internet moden, pemindahan fail masa nyata adalah bahagian penting. Terdapat banyak kaedah untuk penghantaran masa nyata, dan WebSocket adalah yang paling biasa digunakan. API WebSocket dalam Java membolehkan anda melaksanakan fungsi pemindahan fail masa nyata dengan mudah dan mudah. Artikel ini akan menunjukkan kepada anda cara menggunakan WebSocket untuk pemindahan fail masa nyata dalam Java, sambil memberikan beberapa contoh kod konkrit.
Pengenalan kepada WebSocket
WebSocket ialah sebahagian daripada standard HTML5 dan merupakan protokol rangkaian berdasarkan TCP. Protokol ini menyediakan keupayaan rangkaian untuk komunikasi dua arah melalui sambungan TCP tunggal, membenarkan penghantaran masa nyata. Ini berbeza daripada protokol HTTP tradisional, yang merupakan protokol tanpa kewarganegaraan dan memerlukan sambungan baharu untuk diwujudkan untuk setiap permintaan.
Ciri-ciri utama protokol WebSocket adalah seperti berikut:
Penggunaan Java WebSocket API
Java8 memperkenalkan JSR-356, iaitu API standard WebSocket di Java. Kelas utama Java WebSocket API adalah dalam pakej javax.websocket APInya terbahagi kepada dua kategori Satu ialah API yang berkaitan dengan sambungan WebSocket itu sendiri, dan satu lagi adalah API yang berkaitan dengan pemprosesan mesej.
API berkaitan sambungan WebSocket
Titik Akhir: mewakili titik akhir WebSocket yang boleh menerima permintaan sambungan pelanggan dan permintaan pemutusan sambungan.
Sesi: Mewakili sesi sambungan WebSocket, digunakan untuk menghantar dan menerima mesej teks dan binari.
MessageHandler: Antara muka pemprosesan mesej WebSocket, dengan dua kelas pelaksanaan Teks dan Binari. Pengguna boleh mendengar mesej dan memprosesnya dengan melanggan antara muka ini.
API yang berkaitan dengan pemprosesan mesej WebSocket
OnMessage: Kaedah pemprosesan mesej yang dihantar oleh klien WebSocket boleh dilaksanakan melalui anotasi.
RemoteEndpoint: digunakan untuk menghantar mesej.
Penggunaan WebSocket
Dalam pembangunan sebenar, pelayan WebSocket dan klien WebSocket biasanya diperlukan Di bawah kami akan memperkenalkan cara menggunakan WebSocket untuk melaksanakan fungsi pemindahan fail.
Pelayan WebSocket
import java.io.IOException; import java.nio.ByteBuffer; import java.util.logging.Level; import java.util.logging.Logger; import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.websocket.OnOpen; import javax.websocket.PongMessage; import javax.websocket.RemoteEndpoint; import javax.websocket.Session; import javax.websocket.server.ServerEndpoint; @ServerEndpoint("/filetransfer") public class FileTransferEndpoint { private static final Logger LOGGER = Logger.getLogger(FileTransferEndpoint.class.getName()); @OnOpen public void onOpen(Session session) { LOGGER.log(Level.INFO, "Session " + session.getId() + " has opened a connection"); } @OnMessage public void onMessage(ByteBuffer message, Session session) { LOGGER.log(Level.INFO, "Received ByteBuffer message from " + session.getId()); try { RemoteEndpoint.Basic remote = session.getBasicRemote(); remote.sendText("Hello, " + message.toString()); } catch (IOException e) { LOGGER.log(Level.SEVERE, "Failed to send ByteBuffer message ", e); } } @OnMessage public void onMessage(String message, Session session) { LOGGER.log(Level.INFO, "Received Text message from " + session.getId() + ": " + message); try { RemoteEndpoint.Basic remote = session.getBasicRemote(); remote.sendText("Hello, " + message); } catch (IOException e) { LOGGER.log(Level.SEVERE, "Failed to send Text message ", e); } } @OnMessage public void onMessage(PongMessage message, Session session) { LOGGER.log(Level.INFO, "Received pong message from " + session.getId() + ": " + message); } @OnError public void onError(Throwable exception, Session session) { LOGGER.log(Level.SEVERE, "Session " + session.getId() + " occurred exception ", exception); } @OnClose public void onClose(Session session) { LOGGER.log(Level.INFO, "Session " + session.getId() + " has closed the connection"); } }
import javax.websocket.WebSocketContainer; import javax.websocket.server.ServerEndpointConfig; import org.glassfish.tyrus.server.Server; public class Main { public static void main(String[] args) { Server server = new Server("localhost", 8080, "/", null, FileTransferEndpoint.class); try { server.start(); System.in.read(); } catch (Exception e) { e.printStackTrace(); } finally { server.stop(); } } }
Server
, yang mendengar port tempatan 8080 dan memajukan permintaan sambungan klien ke FileTransferEndpoint
kelas untuk pemprosesan. Server
类创建了一个 WebSocket 服务端,它监听本机的 8080 端口,并将客户端连接请求转发到 FileTransferEndpoint
类中进行处理。WebSocket 客户端
import java.net.URI; import java.net.URISyntaxException; import java.util.Scanner; import javax.websocket.ContainerProvider; import javax.websocket.DeploymentException; import javax.websocket.WebSocketContainer; public class Client { private static Object waitLock = new Object(); public static void main(String[] args) { URI uri; try { uri = new URI("ws://localhost:8080/filetransfer"); } catch (URISyntaxException e) { e.printStackTrace(); return; } WebSocketContainer container = ContainerProvider.getWebSocketContainer(); try { Session session = container.connectToServer(MyClientEndpoint.class, uri); synchronized(waitLock) { waitLock.wait(); } } catch (DeploymentException | InterruptedException e) { e.printStackTrace(); } finally { container.getDefaultSessionMaxIdleTimeout(); } } public static class MyClientEndpoint extends Endpoint { @Override public void onOpen(Session session, EndpointConfig config) { session.addMessageHandler(new MessageHandler.Whole<String>() { @Override public void onMessage(String message) { System.out.println(message); } }); try { ByteBuffer buffer = ByteBuffer.wrap("Hello World".getBytes()); session.getBasicRemote().sendBinary(buffer); } catch (IOException e) { e.printStackTrace(); } } } }
ws://localhost:8080/filetransfer
Pertama, kita perlu mencipta klien WebSocket dan menyambung ke pelayan.
rrreee
🎜Dalam coretan kod di atas, kami mencipta klien WebSocket dan menyambung ke URLws://localhost:8080/filetransfer
pada pelayan. 🎜🎜Mulakan klien, klien akan menghantar rentetan "Hello World" ke pelayan dan menerima respons daripada pelayan. 🎜🎜🎜Ringkasan🎜🎜Setakat ini, artikel ini telah memperkenalkan kaedah menggunakan WebSocket untuk pemindahan fail masa nyata dalam Java Ia telah memperkenalkan secara terperinci pelaksanaan pemindahan fail masa nyata dari aspek protokol WebSocket, penggunaan Java API WebSocket, dan pelaksanaan pelayan dan langkah khusus WebSocket. Menggunakan WebSocket membolehkan pemindahan fail masa nyata yang cekap dan boleh dipercayai dan merupakan bahagian penting dalam aplikasi moden. 🎜Atas ialah kandungan terperinci Cara menggunakan WebSocket untuk pemindahan fail masa nyata di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!