2013-07-12 5 views
-1

У меня есть клиент/серверная программа, которая использует сокеты. На стороне сервера у меня естьКак уменьшить время соединения сокетов в java?

ServerSocket s=new ServerSocket(8888); 
s.setSoTimeout(10000); 
Socket incoming=s.accept(); 
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
ObjectInputStream ios = new ObjectInputStream(s.getInputStream()); 
s.close(); 
oos.close(); 
ios.close(); 
incoming.close(); 

На стороне клиента я имею

Socket s=new Socket("172.17.20.47", 8888);  
ObjectOutputStream oos=new ObjectOutputStream(s.getOutputStream()); 
ObjectInputStream ios = new ObjectInputStream(s.getInputStream()); 
s.close(); 
oos.close(); 
ios.close(); 

Когда я измерил время, как:

long start= System.CurrentTimeMillis();  
Socket incoming=s.accept(); 
long end= System.CurrentTimeMillis(); 
System.out.println(end-start); 

я показал, что Socket incoming=s.accept(); занимает ~ 450ms. Как я могу уменьшить это время? Потому что вся остальная часть кода занимает до ~ 15 мс.

пинг между компьютерами является < 1мс

+4

'accept()' блокируется до появления запроса. Таким образом, ваше измерение времени неточно. –

ответ

0

Ответ на это будет читать комментарий Eng.Fouad в. Функция accept в классе ServerSocket ждет, пока не поступит входящий запрос. Если вы ждали 5 часов, прежде чем вы начали свой код клиента, функция accept будет принимать 18000000 мс !! Вы не можете сделать эту функцию быстрее, это уже так быстро, как могло бы быть.

(шутка: вы можете сократить время функции принимают по запустить клиент быстрее ..) :)

Надеюсь, вы понимаете, почему функция принимает взять столько времени (на самом деле это не так).

+0

Но дело в том, что я запускаю клиент одновременно с сервером, и они делают то же самое количество вычислений до подключения –

+1

Не имеет значения, как долго accept() взял. Все, что вы измеряете, - это реальный смысл «в то же время». То, что вы должны измерить, - это время для подключения к клиенту. – EJP

Смежные вопросы