Чтение данных из входного потока без "flush()" на стороне клиента

Я реализовал программу на Java, которая считывает данные с GPS-устройств через ServerSocket.

ServerSocket serverSocket = new ServerSocket(13811);
serverSocket.setReceiveBufferSize(receiveBufferSize);
Socket incomingSocket = serverSocket.accept();
InputStream stream = incomingSocket.getInputStream();
byte[] buffer = new byte[1000];
            StringBuffer sb = new StringBuffer();
System.out.println("START getting message from TCP stream: " + dateFormat.format(Calendar.getInstance().getTime()));

            while (stream.read(buffer) > 0)
            {
                sb.append(new String(buffer));
                System.out.println(sb.toString());
            }
System.out.println("[incomingMessage]: " + incomingMessage);

System.out.println("FINISHED getting message from TCP stream: " + dateFormat.format(Calendar.getInstance().getTime()));

Однако мы обнаружили, что существует большая задержка (т.е. большое отклонение между временем Sys out "START..." и "FINISHED..." выше). Это время было потрачено на inputStream.read().

Если я использую Java-клиент для подключения к указанному выше порту сервера и отправляю на него данные, то сообщение читается серверным inputStream в течение нескольких мс. Ниже показан код Java-клиента.

Socket socket = new Socket("localhost", 13811); 
DataOutputStream out = new DataOutputStream(new  BufferedOutputStream(socket.getOutputStream()));
String tobesend = "testing message 1";
out.writeBytes(tobesend);
out.flush();
out.close();

Однако, если я добавлю "Thread.Sleep(10*1000)" перед "out.flush()" и "out.close()", задержка на стороне сервера станет 10 секунд... Поэтому я подозреваю, что если GPS устройство не выполнило "flush" и в результате задержка inputstream.read() на стороне сервера...

К сожалению, у нас нет контроля над TCP-вызовами GPS-устройства, поэтому я не могу внести в него какие-либо изменения, чтобы заставить его "промывать" сообщение в моем входном потоке... Пожалуйста, посоветуйте, есть ли какие-нибудь средства, чтобы серверная сторона могла читать данные из входного потока без такой задержки, даже если клиентская сторона (т.е. GPS-устройство) не выполняет "flush"?

0
задан xlogger 31 January 2012 в 17:43
поделиться