簡體   English   中英

通過Java Socket發送對象真的很慢

[英]Sending Objects over Java Socket really slow

我不知道為什么我的帶有SocketServerSocket Java Server在發送對象時這么慢。 這里有一個小的ping程序來演示我的問題。 如果我在同一台計算機上同時運行客戶端和服務器,則一切正常(ping時間<1ms)。 但是,如果將服務器移至Linux機器,則ping時間> 500ms(通過命令行對該計算機執行ping操作表示20ms)。

提前致謝


服務器:

public static void main(String[] args) {
    try {
        ServerSocket serverSocket = new ServerSocket(Integer.parseInt(args[0]));
        Socket socket = serverSocket.accept();

        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());

        oos.writeObject(System.currentTimeMillis());
        long time = (long)ois.readObject();

        System.out.println(System.currentTimeMillis()-time+" ms");

    } catch (Exception e) {
        System.out.println("Some error occured");
        System.exit(1);
    }
}

客戶:

public static void main(String[] args) {
    try {
        Socket socket = new Socket(args[0], Integer.parseInt(args[1]));

        ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

        long time = (long)ois.readObject();
        oos.writeObject(time);

    } catch (Exception e) {
        System.out.println("Some error occured");
        System.exit(1);
    }
}

我在網上四處張望,您不是唯一遇到此問題的人。 這篇文章也描述了相同的問題

基本上,您應該做的不是:

ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

您應該寫:

ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(socket.getOutputStream()));
ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(socket.getInputStream()));

並定期寫:

oos.flush();//Write after you send data

我遇到了同樣的問題,簡單的連接ping了大約400ms。 嘗試在創建套接字后添加以下行: socket.setTcpNoDelay(true);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM