Rumah  >  Artikel  >  Java  >  Cara menggunakan WebSocket untuk pemindahan fail masa nyata di Java

Cara menggunakan WebSocket untuk pemindahan fail masa nyata di Java

王林
王林asal
2023-12-17 21:59:06853semak imbas

Cara menggunakan WebSocket untuk pemindahan fail masa nyata di Java

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:

  1. Masa nyata: WebSocket boleh mengekalkan sambungan yang panjang, mencapai penghantaran masa nyata, dan boleh memindahkan sebarang jenis data antara pelayan dan pelanggan.
  2. Komunikasi dua hala: WebSocket menyokong komunikasi dua hala Pelayan boleh menolak mesej secara aktif kepada pelanggan dan bukannya hanya menunggu permintaan pelanggan.
  3. Menyokong berbilang format data: WebSocket boleh menghantar berbilang jenis data seperti teks, binari, dsb., dan boleh memenuhi keperluan pelbagai jenis aplikasi.

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

  1. Pertama, kita perlu mencipta titik akhir WebSocket Dalam titik akhir ini, kita boleh mengendalikan permintaan sambungan WebSocket dan permintaan pemutusan sambungan, dan mencipta contoh Sesi untuk mewujudkan sesi dengan pelanggan.
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");
    }
}
  1. Dalam coretan kod di atas, kami melaksanakan tiga kaedah onMessage untuk mengendalikan data jenis ByteBuffer, String dan PongMessage.
  2. Mulakan pelayan supaya pelayan WebSocket menerima permintaan sambungan pelanggan.
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();
        }
    }
}
  1. Dalam coretan kod di atas, kami mencipta pelayan WebSocket melalui kelas Server, yang mendengar port tempatan 8080 dan memajukan permintaan sambungan klien ke FileTransferEndpoint kelas untuk pemprosesan. Server 类创建了一个 WebSocket 服务端,它监听本机的 8080 端口,并将客户端连接请求转发到 FileTransferEndpoint 类中进行处理。

WebSocket 客户端

  1. 首先,我们需要创建一个 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();
            }
        }
    }
}
  1. 在上面的代码片段中,我们创建了一个 WebSocket 客户端,连接到服务端的 ws://localhost:8080/filetransfer
  2. WebSocket Client

Pertama, kita perlu mencipta klien WebSocket dan menyambung ke pelayan.

rrreee

🎜Dalam coretan kod di atas, kami mencipta klien WebSocket dan menyambung ke URL ws://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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn