Запись в поток сервлетов - PullRequest
       22

Запись в поток сервлетов

2 голосов
/ 25 октября 2011

Я не уверен, что то, что я пытаюсь сделать, возможно, а может и нет. Вот моя проблема:

Я пытаюсь использовать сервлет для передачи информации от клиента на сервер через HTTP. Это общение очень частое (я передаю информацию пользовательского интерфейса, поэтому каждое событие мыши), поэтому я хочу иметь как можно меньше накладных расходов, чтобы избежать проблем с задержкой, поэтому я не хотел бы делать вызов GET для каждой передачи , HTTP это требование. Я использую старую версию Tomcat (Servlet API 2.4). Я предполагаю, что это отчасти случай использования веб-сокетов, но у меня нет какой-либо поддержки веб-сокетов.

Я пытался открыть URL-соединение на стороне клиента и открыть поток ввода (в противном случае doGet () сервлета никогда не вызывается). Я передаю аргумент для целей инициализации клиенту.

URLConnection uiConnection = url.openConnection();      
uiConnection.setRequestProperty("Authorization", "Basic " + encode("xyz" + ":"
            + "xyz"));
uiConnection.setReadTimeout(0);
uiConnection.setDoOutput(true);
uiConnection.setAllowUserInteraction(true);
DataInputStream is = new DataInputStream(
uiConnection.getInputStream());

Когда я позже пытаюсь извлечь выходной поток из этого соединения, я получаю исключение ProtocolException (не могу записать вывод после чтения ввода).

out = new BufferedWriter(new OutputStreamWriter(
uiConnection.getOutputStream()));
out.write(uiUpdate);

На стороне сервлета я сделал что-то вроде этого:

DataInputStream is = new DataInputStream(
            request.getInputStream());

Я совершенно не на том пути или что-то подобное возможно без использования нового соединения для каждой передачи?

Спасибо, Mark

1 Ответ

0 голосов
/ 01 ноября 2011

Я думаю, что ключевой вопрос для этого, у вас также есть трафик http, идущий на этот IP?Если это так, то, возможно, вы ничего не сможете сделать, используя только Java.Если нет, то создайте сервлет для прослушивания на порту 80 и проанализируйте входящие данные напрямую.

http://download.oracle.com/javase/tutorial/networking/sockets/clientServer.html

...