相关疑难解决方法(0)

使用带有套接字的Javas对象流的性能问题

我正在尝试使用Java中的套接字和对象流来进行本地IPC但是我看到性能不佳.

我正在测试通过ObjectOutputStream发送对象的ping时间,以通过Socket上的ObjectInputStream接收回复.

这是请求者:

public SocketTest(){

    int iterations = 100;
    try {
        Socket socket = new Socket("localhost", 1212);

        ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream()); 
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); 

        double start = System.currentTimeMillis();
        for (int i = 0; i < iterations; ++i) {

            Request request = new Request();
            objectOutputStream.writeObject(request);

            Response response = (Response)objectInputStream.readObject();
        }
        double finish = System.currentTimeMillis();
        System.out.println("Per ping: " + (finish - start) / iterations );

    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是响应者:

public ServerSocketTest(){

    try {

        ServerSocket …
Run Code Online (Sandbox Code Playgroud)

java sockets performance objectoutputstream objectinputstream

10
推荐指数
1
解决办法
3826
查看次数

通过 Java Socket 发送对象真的很慢

我想不通,为什么我的Java服务器使用Socket,并ServerSocket是缓慢的,而发送的对象。这里有一个小 ping 程序来演示我的问题。如果我在同一台机器上同时运行客户端和服务器,一切都很好(<1ms ping 时间)。但是,如果我将服务器移到 Linux 机器上,我的 ping 时间会超过 500 毫秒(通过命令行对那台机器的 ping 时间为 20 毫秒)。

提前致谢


服务器:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

客户:

public static void main(String[] args) {
    try {
        Socket socket = new Socket(args[0], …
Run Code Online (Sandbox Code Playgroud)

java sockets connection server

2
推荐指数
1
解决办法
4487
查看次数