Jon*_*han 10 java sockets performance objectoutputstream objectinputstream
我正在尝试使用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 serverSocket = new ServerSocket(1212);
Socket socket = serverSocket.accept();
ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream());
Request request = (Request)objectInputStream.readObject();
while (request != null) {
Response response = new Response();
objectOutputStream.writeObject(response);
request = (Request)objectInputStream.readObject();
}
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
Per ping:80.35
对于本地交通来说,80毫秒的速度非常慢.
请求和响应类非常小,序列化很快.
我试过天真添加:
socket.setKeepAlive(true);
socket.setTcpNoDelay(true);
Run Code Online (Sandbox Code Playgroud)
影响不大.
执行ping localhost:
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=0 ttl=64 time=0.035 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.037 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=3 ttl=64 time=0.039 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=4 ttl=64 time=0.056 ms
Run Code Online (Sandbox Code Playgroud)
也快.
Java版本1.6.0_05l在RedHat 2.4上运行
| 归档时间: |
|
| 查看次数: |
3826 次 |
| 最近记录: |