powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Скорость соединения клиент/сервер
9 сообщений из 9, страница 1 из 1
Скорость соединения клиент/сервер
    #34224813
Мистерио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем!

Возникла проблема.
Написал для теста простое клиент-серверное приложение на сокетах без NIO.
Исходный код приводить не буду, т.к. он стандартен на все 100%.
Сервер и клиент шлют друг другу пакеты по 40 байта.
Замеряется пинг, между приемом и ответом на сервере.

Так вот, когда сервер и клиент на localhost'е все работает очень быстро пинг 0-12 мс.
Но стоит запустить сервер на удаленном компе (но в той же локальной сети), как пинг возрастает до 300 мс, введение двух сокетных соединений по разным портам - одно для приема, другое для отправки помогло уменьшить пинг до 200 мс. Но это все равно МНОГО.

Так вот, никто не в курсе каких действительно цифр стоит ждать?
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34224833
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как измеряете?
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34224927
Мистерио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Примерно так:

while(true){

long LastTime = System.currentTimeMillis();
System.out.println("ping is");
System.out.println(pr-LastTime);
LastTime = pr;

...тут прием 40 байт

...тут отправка 40 байт

}
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34224951
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и по скОльким циклам приём/отправка сделан вывод о 200 мс
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34225038
Мистерио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну блин...
не знаю, много (100-1000)...
могу тебя уверить что в подсчетах все правильно :)
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34225339
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот даже такой, ужасный с точки зрения оптимизации, код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
...
//Server
         try {
            
            Socket socket =  new  ServerSocket(port).accept();
            
            InputStream in = socket.getInputStream();
            
            OutputStream out = socket.getOutputStream();
            
             long  iterations =  0 ;
             long  timeSum =  0 ;
            
            System.out.println("Client connected.");
                    
             while  (true) {
                
                 if  (in.available() >  0 ) {
                    
                     long  begin = System.currentTimeMillis();
                    
                     byte [] buffer =  new   byte [in.available()];
                    
                    in.read(buffer);
                    
                    System.out.print("+");
                    
                     if  (buffer[ 0 ] ==  32 ) {
                        
                         break ;
                        
                    }
                    
                    out.write(buffer);
                    
                    System.out.print("-");
                    
                     long  end = System.currentTimeMillis();
                    
                    timeSum += end - begin;
                    
                    iterations++;
                    
                }  else  {
                    
                    Thread.currentThread().sleep( 1 );
                    
                }
                
            }
            
            System.out.println("AVG time " + ( double )timeSum / iterations + " ms");
            
        }  catch  (IOException e) {
            
            e.printStackTrace();
            
        }  catch  (InterruptedException e) {
            
            e.printStackTrace();
            
        }
...
//Client
         try  {
            
            Socket socket =  new  Socket(host, port);
            
            InputStream in = socket.getInputStream();
            
            OutputStream out = socket.getOutputStream();
            
             byte [] buffer =  new   byte [ 40 ];
            
            System.out.println("Connected.");
            
             for  ( int  i =  0 ; i <  1000 ; i++) {
                
                out.write(buffer);
                
                System.out.print("+");
                
                 while  (in.available() <  39 ) {
                    
                    Thread.currentThread().sleep( 1 );
                    
                }
                
                in.read(buffer);
                
                System.out.print("-");
                
            }
            
            out.write(( byte ) 32 );
            
            System.out.println("\nDone.");
            
        }  catch  (IOException e) {
            
            e.printStackTrace();
            
        }  catch  (InterruptedException e) {
            
            e.printStackTrace();
            
        }
...

Даёт результаты:
Solaris server - Windows client AVG time 0.877 ms
Windows server - Solaris client AVG time 0.015 ms
JDK6
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34226594
Мистерио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странно, вроде точно такой же код писал, а он работал медленно...
буду разбираться...

Спасибо.
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34226658
Мистерио
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда еще вопрос :)

Поразбирался на свежую голову, и пришел к следующему выводу:

у меня данные отправлялись как бы в два приема. Сначала делал os.write(byte[4]) - это отправлял типа заголовник, который говорит, о размере основного пакета. А уже потом слал основной пакет, так же os.write(byte[mainPack.length]).

И получается, если делать отправку больше чем за один write, то лаг возрастает до 300 мс.
А отпрака одним write'ом дает лаг в среднем 6 мс, что приемлемо.

Это такие особенности реализации сокетов на Java или как?

Может есть способ накапливать данные, а потом скажем вызововом flush() их отпралять?
...
Рейтинг: 0 / 0
Скорость соединения клиент/сервер
    #34226926
mozheyko_d
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу, меняешь OutputStream на BufferedOutputStream
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Скорость соединения клиент/сервер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]