Heim >Java >javaLernprogramm >So verwenden Sie WebSocket für die Echtzeit-Dateiübertragung in Java
In modernen Internetanwendungen ist die Dateiübertragung in Echtzeit ein fester Bestandteil. Es gibt viele Methoden für die Echtzeitübertragung, wobei WebSocket die am häufigsten verwendete ist. Mit der WebSocket-API in Java können Sie einfach und unkompliziert Echtzeit-Dateiübertragungsfunktionen implementieren. Dieser Artikel zeigt Ihnen, wie Sie WebSocket für die Echtzeit-Dateiübertragung in Java verwenden, und stellt einige konkrete Codebeispiele bereit.
Einführung in WebSocket
WebSocket ist Teil des HTML5-Standards und ein auf TCP basierendes Netzwerkprotokoll. Dieses Protokoll bietet eine Netzwerkfähigkeit für die bidirektionale Kommunikation über eine einzelne TCP-Verbindung und ermöglicht so eine Übertragung in Echtzeit. Dies unterscheidet sich vom herkömmlichen HTTP-Protokoll, das ein zustandsloses Protokoll ist und für jede Anfrage den Aufbau einer neuen Verbindung erfordert.
Die Hauptmerkmale des WebSocket-Protokolls sind wie folgt:
Verwendung der Java WebSocket API
Java8 führt JSR-356 ein, die WebSocket-Standard-API in Java. Die Hauptklassen der Java WebSocket-API befinden sich im Paket javax.websocket. Die API ist hauptsächlich in zwei Kategorien unterteilt, die sich auf die WebSocket-Verbindung selbst beziehen, und die andere auf die Nachrichtenverarbeitung.
WebSocket-verbindungsbezogene API
Endpunkt: stellt einen WebSocket-Endpunkt dar, der Client-Verbindungsanfragen und Verbindungstrennungsanfragen empfangen kann.
Sitzung: Stellt eine WebSocket-Verbindungssitzung dar, die zum Senden und Empfangen von Text- und Binärnachrichten verwendet wird.
MessageHandler: WebSocket-Nachrichtenverarbeitungsschnittstelle mit zwei Implementierungsklassen Text und Binary. Benutzer können Nachrichten abhören und verarbeiten, indem sie diese Schnittstelle abonnieren.
API für die WebSocket-Nachrichtenverarbeitung
OnMessage: Die Verarbeitungsmethode der vom WebSocket-Client gesendeten Nachrichten kann durch Anmerkungen implementiert werden.
RemoteEndpoint: wird zum Senden von Nachrichten verwendet.
Verwendung von WebSocket
In der tatsächlichen Entwicklung sind normalerweise ein WebSocket-Server und ein WebSocket-Client erforderlich. Im Folgenden stellen wir vor, wie WebSocket zur Implementierung der Dateiübertragungsfunktion verwendet wird.
WebSocket-Server
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
einen WebSocket-Server erstellt, der den lokalen Port 8080 überwacht und die Client-Verbindungsanfrage an FileTransferEndpoint
weiterleitet Klasse zur Bearbeitung. 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
Zuerst müssen wir einen WebSocket-Client erstellen und eine Verbindung zum Server herstellen.
rrreee
🎜Im obigen Codeausschnitt erstellen wir einen WebSocket-Client und stellen eine Verbindung zur URLws://localhost:8080/filetransfer
auf dem Server her. 🎜🎜Starten Sie den Client. Der Client sendet die Zeichenfolge „Hello World“ an den Server und erhält die Antwort vom Server. 🎜🎜🎜Zusammenfassung🎜🎜In diesem Artikel wurde bisher die Methode zur Verwendung von WebSocket für die Echtzeit-Dateiübertragung in Java vorgestellt. Er hat die Implementierung der Echtzeit-Dateiübertragung unter den Aspekten des WebSocket-Protokolls und der Verwendung von Java ausführlich vorgestellt WebSocket-API und Implementierung von WebSocket-Server- und -Client-spezifischen Schritten. Die Verwendung von WebSocket ermöglicht eine effiziente und zuverlässige Dateiübertragung in Echtzeit und ist ein wesentlicher Bestandteil moderner Anwendungen. 🎜Das obige ist der detaillierte Inhalt vonSo verwenden Sie WebSocket für die Echtzeit-Dateiübertragung in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!