powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Два потока для input & output при работе с Java Socket
16 сообщений из 16, страница 1 из 1
Два потока для input & output при работе с Java Socket
    #39471593
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Есть мысль создать два потока. Отдельно для работы с input и отдельно для работы с output.

Сделать это для того, чтобы можно было обрабатывать независимо входящие сообщения и ответы на них.

Практикуется ли такое в реальных проектах?
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471598
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderПрактикуется ли такое в реальных проектах?
Нет, конечно же. Все через один Stream и пишут, и читают.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471605
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczjxcoderПрактикуется ли такое в реальных проектах?
Нет, конечно же. Все через один Stream и пишут, и читают.

я говорю о Thread'ах.

то есть типа вот так:

Код: java
1.
2.
Thread inputThread = new InputThread(socket.getInputStream());
Thread outputThread = new OutputThread(socket.getOutputStream());



Можете дать небольшой пример или как-то более полно раскрыть мысль?
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471609
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderя говорю о Thread'ах.

;)

jxcoderМожете дать небольшой пример или как-то более полно раскрыть мысль?
Да, какой ещё пример. Нормальный подход, как для чтения. Нужен, ли отдельный поток на запись - вотпрос открытый. Если у вас буфер для записи есть, то все в него пишут, а один потом читает, то есть смысл. Если же у вас запись - событие не частое, то можно просто через synchronized метод пакеты слать.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471619
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно я решаю не те проблемы совсем)

Мне нужно отправлять запросы на сервер через сокет.

Сейчас у меня всё просто и тупо. Один клиент и один сервер. И клиент отправляет сообщение, читает ответ и снова отправляет ответ и снова читает новое сообщение и т.д.

У меня возникла мысль, что можно добавить какой-нибудь uuid в каждый запрос и в отдельном потоке отсылать запросы а в отдельном потоке читать ответы. Потом по uuid находить какой запрос выполнен (пришёл ответ от сервера).

Что можете сказать по этому поводу?
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471621
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoder,

Просто чтобы было? А то как-то слишком просто выходит без этого? Лучше бы тогда на селекторы переписали.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471626
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну идея в том, чтобы выполнять запросы параллельно на сервере. То есть клиент шлет две команды, они с разной скоростью выполняются. И когда для них готов ответ, то сервер в сокет сообщает, что я такой-то по номеру запрос отработал. Вот результат.

Идея в том, чтобы не ждать последовательно пока один запрос выполнится потом другой.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471628
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, если у клиентской части в этом есть необходимость, то да. Но я бы не возился с сокетами, а сразу смотрел HTTP/2 и gRPC. Там, скорее всего, это уже реализовано.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471632
jxcoder
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот только пока не понимаю как можно после такой смены архитектуры на клиенте сделать вызов блокирующим. То есть в идеале хочется чтобы клиентский код выглядел бы как обычный вызов метода и получение результата. Такое вообще возможно?
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471641
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderЯ вот только пока не понимаю как можно после такой смены архитектуры на клиенте сделать вызов блокирующим. То есть в идеале хочется чтобы клиентский код выглядел бы как обычный вызов метода и получение результата. Такое вообще возможно?
Ой. Это вообще довольно большой и спорный вопрос.
То есть у вас клиент уже многопоточный что вы так легко хотите блокировать? Например, если у вас UI, то блокировать основной поток, как бы, не очень хорошо.
Посмотрите как работают Future, ExecutorService в JCU. Можно несколько разных вариантов рассмотреть.
- Блокироваться на пуле сообщений от сервера. Будить все потоки, когда пришел любой ответ. Потоки проверяют наличие их ID. Если такового нет, то засыпают.
- Можно хранить Map<ID, Thread> и будить поток, когда придёт сообщение по ID.
В обоих случаях желательно предусмотреть Timeout.
- Можно извратится и вместо блокировки потока прикрутить continuation. Но в Java внятной реализации для него нет. Тут надо бы смотреть на архитекуру клиента, потому как пока что не понятно как у вас устроена его многопоточность.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471713
andmed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoder
Код: java
1.
2.
Thread inputThread = new InputThread(socket.getInputStream());
Thread outputThread = new OutputThread(socket.getOutputStream());



Можете дать небольшой пример или как-то более полно раскрыть мысль?

совместную работу с input и output стримами через треды (если речь об этом) можно организовать используя java.io.PipedOutputStream (и input соответственно)
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471768
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andmed, piped stream-ы имеют свои косяки и к теме вопроса вообще никаким боком не относятся.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471773
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoder,

NIO2
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39471776
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jxcoderМне нужно отправлять запросы на сервер через сокет.

Сейчас у меня всё просто и тупо. Один клиент и один сервер. И клиент отправляет сообщение, читает ответ и снова отправляет ответ и снова читает новое сообщение и т.д.

У меня возникла мысль, что можно добавить какой-нибудь uuid в каждый запрос и в отдельном потоке отсылать запросы а в отдельном потоке читать ответы. Потом по uuid находить какой запрос выполнен (пришёл ответ от сервера).посмотри как устроен протокол websocket. в нем можно отправлять из любого места запросы. сервер будет отвечать по готовности . и твой uuid как раз и сгодится чтоб "связять" ответ с запросом.
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39472868
andmed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczandmed, piped stream-ы имеют свои косяки и к теме вопроса вообще никаким боком не относятся.
ну ок. мы организовали обработку картинок таким образом. на косяки пока не нарвались
...
Рейтинг: 0 / 0
Два потока для input & output при работе с Java Socket
    #39472894
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andmedну ок. мы организовали обработку картинок таким образом. на косяки пока не нарвались
Это объясняет какое отношение оно имеет к первоначальному вопросу. :)
А если серьезно, я тут тоже попробовал на днях. Для экономии памяти. Оказалось, что проще тупо заюзать временные файлы, чем аккуратно обработать все закрытия и убедится что потоки не утекают.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Два потока для input & output при работе с Java Socket
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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