powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно написать общение объектов через сокеты?
25 сообщений из 59, страница 1 из 3
Как правильно написать общение объектов через сокеты?
    #38310839
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача у меня такая:

Я получаю от объекта 1 через сокет А команду (у меня там сокет-сервер), ее конвертирую в нужный формат и отправляю через сокет Б(клиент) объекту 2.

Возможны следующие ситуации:

1) Каноническая: принимаю команду через сокет А, конверчу, отправляю в сокет Б
2) То же самое, но должен дождаться ответа из сокета Б и передать ответ через сокет А объекту 1. Если ответа в течение определенного времени не получено, передаю в сокет А сообщение об ошибке
3) Иногда ситуация обратная: приходит команда из сокета Б и ее нужно сконвертировать и отправить в сокет А

У меня опыта работы с сокетами мало и потому я запутался. Короче, как правильные джависты такие случаи программируют?
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38310897
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно решить два вопроса. Протокол транспорта
TCP, HTTP что-то ещё?
Протокол сериализации
Java, protobuf, JSON и т.д.

TCP + Java сериализация это RMI.
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38310898
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38310906
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12,
автор дождаться ответа
- это не Java, а БЛ - Связь Мастер-Мастер (двунаправленная) или Мастер --> Клиент (однонаправленная)
- всё таки - "Ответ" или просто "сообщение в обратную сторону"?
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38310941
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123всё таки - "Ответ" или просто "сообщение в обратную сторону"?
В сторону А-> Б посылается либо команда, либо запрос. В обратную сторону посылается либо ответ на запрос, либо, например, сообщение об ошибке. Иногда сообщение об ошибке может возникать само по себе, не привязанное к запросу. Т.е. из Б в А посылается просто сообщение.
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38310956
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНужно решить два вопроса. Протокол транспорта
TCP, HTTP что-то ещё?
Протокол сериализации
Java, protobuf, JSON и т.д.

TCP + Java сериализация это RMI.
Протокол транспорта TCP , а "команда" - это xml-последовательность в сторону ( А->Б ) и что-то типа текстовой строки с разделителями в обратную сторону. Чисто-конкретно десктопное приложение - на одном сокете сервер (общение с объектом 1), на другом (общение с объектом 2)- клиент. Объекты 1 и 2 - там не мои программы, я просто обеспечиваю их взаимодействие...
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38310977
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в чем проблема? Сделайте RMI обертку. Зачем какой-то XML гонять? Если и там и там Java, то почему бы не передавать сразу объекты. Даже если остро нужен XML, то лучше использовать XML сериализацию, а XML API.
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311007
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczТак в чем проблема? Сделайте RMI обертку. Зачем какой-то XML гонять? Если и там и там Java, то почему бы не передавать сразу объекты. Даже если остро нужен XML, то лучше использовать XML сериализацию, а XML API.
Нет, "там" и "там" как раз не джава.

Объект 1 - это некий иноземный прибор, который по TCP через сокет шлет xml-команды, которые я должен принять, переконвертировать и переправить через сокет Б объекту 2, который также для меня внешний, и написан не на джаве. Мне даются два протокола обмена (с одной стороны xml-команды, c другой - текст с разделителями.)

Я должен принять, переконвертировать, отдать, иногда дождаться ответа и передать его. А иногда - просто передать сообщения в обратную сторону, не инициированные запросом со стороны объекта 1.

Я запутался как лучше это сделать - и в плане разнопоточности и в плане взаимодействия и синхронизации действий. Синхронизацию потоков как таковую я представляю, а как вот правильно все организовать в моем конкретном случае - не представляю... Ну, по простому туплю чего-то...
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311024
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Нет, "там" и "там" как раз не джава.
Объект 1 - это некий иноземный прибор, который по TCP через сокет шлет xml-команды, которые я должен принять, переконвертировать и переправить через сокет Б объекту 2, который также для меня внешний, и написан не на джаве. Мне даются два протокола обмена (с одной стороны xml-команды, c другой - текст с разделителями.)

Я должен принять, переконвертировать, отдать, иногда дождаться ответа и передать его. А иногда - просто передать сообщения в обратную сторону, не инициированные запросом со стороны объекта 1.

Я запутался как лучше это сделать - и в плане разнопоточности и в плане взаимодействия и синхронизации действий. Синхронизацию потоков как таковую я представляю, а как вот правильно все организовать в моем конкретном случае - не представляю... Ну, по простому туплю чего-то...
Ну, вот. Хоть какая-то конкретника. "Разнопоточность". 8)
А что за два сокета тогда???
Есть девайс, он работает с сервером? И есть GUI, который работает с тем же сервером? Так?
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311037
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12,
если это девайс, тогда он должен иметь протокол более высокого уровня.
Либо тогда к девайсу цепляется драйвер на другом ЯП для трансляции
Прибор+драйвер-транслятор ----> внешние системы
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311054
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Если ответа в течение определенного времени не получено, передаю в сокет А сообщение об ошибке
не бойся выложить ПРОТОКОЛ работы чужлго прибора1.
Там должен быть тайм-аут ожидания ответа. А также вероятно технические пинги-команды для подтверждения коннекта.
- может ли быть несколько приборов или клиентов?
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311085
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else121) Каноническая: принимаю команду через сокет А, конверчу, отправляю в сокет Б
2) То же самое, но должен дождаться ответа из сокета Б и передать ответ через сокет А объекту 1. Если ответа в течение определенного времени не получено, передаю в сокет А сообщение об ошибке
3) Иногда ситуация обратная: приходит команда из сокета Б и ее нужно сконвертировать и отправить в сокет А
в принципе, так бери и пиши:
- модуль получения XML (тут было)
- модуль конвертации XML в КомандаА (шаблон Команда для крутости)
- модуль-переменная хранения состояния для запроса-таймаута
- ....
Удачи!
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311095
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Прибор+драйвер-транслятор ----> внешние системы
Да, оно.
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311099
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Petro123Прибор+драйвер-транслятор ----> внешние системы
Да, оно.
т.к. у тебя вся работа по факту Драйвер на сокетах.
Java не лучший ЯП для этого.
Удачи!
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311109
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123не бойся выложить ПРОТОКОЛ работы чужлго прибора1.
Там страниц эдак на 30-40...

Petro123Там должен быть тайм-аут ожидания ответа. А также вероятно технические пинги-команды для подтверждения коннекта.
- может ли быть несколько приборов или клиентов?
Эт как? Прибор - он внешний. А мой "драйвер-конвертор" - это по сути демон на компьютере. В сокет этому компьютеру приходят команды, в другой сокет уходят преобразованные в другой формат те же команды... Один "прибор" со стороны 1 и другой - со стороны 2.

Petro123в принципе, так бери и пиши:
- модуль получения XML (тут было) - уже написал
- модуль конвертации XML в КомандаА (шаблон Команда для крутости) - уже написал
- модуль-переменная хранения состояния для запроса-таймаута - а вот тут я и запнулся - как эту всю лабуду синхронизировать?
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311116
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНу, вот. Хоть какая-то конкретника. "Разнопоточность". 8)
А что за два сокета тогда???
Есть девайс, он работает с сервером? И есть GUI, который работает с тем же сервером? Так?
Собственно, уже описал схему. ГУИ там нет, это что-то типа демона-драйвера -конвертора. "Сервер" - я имел в виду сокет, через который я принимаю команду от объекта 1 - сервер с моей стороны по отношению к объекту 1. А отправляю команду на объект 2 и принимаю оттуда ответ - через сокет, который "клиент" по отношению к объекту 2. Так мне поставлена задача...
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311145
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123т.к. у тебя вся работа по факту Драйвер на сокетах.
Java не лучший ЯП для этого.
Удачи!
Собственно, не принципиально. Какая разница. Я с++ знаю хуже, поэтому и пишу на джаве (остальные знакомые языки не кросс-платформенны). Главное, чтобы работала.

Проблема в том, что не соображу как все правильно синхронизировать...
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311171
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Собственно, уже описал схему. ГУИ там нет, это что-то типа демона-драйвера -конвертора. "Сервер" - я имел в виду сокет, через который я принимаю команду от объекта 1 - сервер с моей стороны по отношению к объекту 1. А отправляю команду на объект 2 и принимаю оттуда ответ - через сокет, который "клиент" по отношению к объекту 2. Так мне поставлена задача...
"объект" это экземпляр класса. Удаленная сторона, обычно называется tier. Чем больше вы используете термины не по назначению, тем сложнее вас понять.

У вас один сокет серверный, а второй клиентский? Т.е. серверный может получать данные из разных источников, а клиентский может получать\отправлять только синхронно? Так?
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311207
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12- модуль-переменная хранения состояния для запроса-таймаута - а вот тут я и запнулся - как эту всю лабуду синхронизировать?
- я вас спрашивал - надо ли по протколу пинговать? Если нет, то проще.

Приведи пример, какую ошибку надо отправить при отсутствии ответа Б-А.
Почему нельзя САМОМУ А реагировать на отсутствие ответа Б-А? Тогда тебя посередине НИЧЕГО не будет волновать - получил - передал.
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311224
Фотография schwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если между клиентом и сервером не просто запрос-ответ, а запрос-ответ + какие-то уведомления от сервера, то нужно брать сокеты из nio ( http://docs.oracle.com/javase/7/docs/api/java/nio/channels/package-summary.html), а лучше какую-нибудь обертку на ними ( http://netty.io/). Для такого сценария на блокирующие сокеты лучше даже сразу не смотреть т.к. для такой схемы вы ничего кроме головной боли не получите.
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311230
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schwa,
если клиент один, то вроде блокировать некому....
Конечно, надо нагрузку на канал знать...
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311236
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12Petro123т.к. у тебя вся работа по факту Драйвер на сокетах.
Java не лучший ЯП для этого.
Удачи!
Собственно, не принципиально. Какая разница. Я с++ знаю хуже, поэтому и пишу на джаве (остальные знакомые языки не кросс-платформенны). Главное, чтобы работала.
Совершенно здравое рассуждение. Меньше слушайте критиканов (которые делают громкие заявления, не подкрепляя доказательствами).
else12Проблема в том, что не соображу как все правильно синхронизировать...
Для начала нарисуйте картинку - как от объекта к объекту у вас движутся сообщения (включая сигналы таймера). Типа таких, которые подсказывает гугл "картинки по запросу data flow" на Data flow diagram . Теперь картинку надо формализировать: везде поставить стрелки, и выписать условие прохождения сообщений через узлы. Типичные условия: узел одновременно обрабатывает не более одного сообщения, узел начинает обработку когда сообщения пришли на все входы, после обработки сообщения удаляются со входов и пересылаются дальше и т.п. Наиболее близкая и понятная математическая модель - сети Петри , но надо избегать ситуаций, когда из одной позиции идут стрелки на несколько переходов - эти ситуации трудно реализуются. Собственно это и будет синхронизация. Останется эту картинку реализовать, но это другой вопрос. Когда покажете картинку, вым сразу подскажут.
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311253
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczУ вас один сокет серверный, а второй клиентский?
Да

BlazkowiczТ.е. серверный может получать данные из разных источников, а клиентский может получать\отправлять только синхронно? Так?
Не совсем. Серверный является серверным только потому, что такие условия мне выкатили, а так он получает сигнал из одного источника. Клиентский (сокет Б) в основном работает в режиме "получил информацию -> переправил в выходной поток -> получил ответ -> передал для передачи в сокет А"

Иногда клиентский сокет получает ответ безо всякого запроса.

При этом надо отследить, чтобы, если долго нет ответа (заданное число милисекунд), то это воспринялось как ошибка даже в случае, если информация запоздало придет.

Собственно, вот...
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311261
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
else12то это воспринялось как ошибка
кем воспринялось?
...
Рейтинг: 0 / 0
Как правильно написать общение объектов через сокеты?
    #38311264
else12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123 я вас спрашивал - надо ли по протколу пинговать? Если нет, то проще.
Не надо.

Petro123Приведи пример, какую ошибку надо отправить при отсутствии ответа Б-А.
Обычный простейший xml с тегами <Error>, <ErrorCode>

Petro123Почему нельзя САМОМУ А реагировать на отсутствие ответа Б-А? Тогда тебя посередине НИЧЕГО не будет волновать - получил - передал.
Тут условия заданы поставщиком оборудования - реагируем мы, а не он. Он ,скотина такая, просто ждет и потом реагирует на наш ответ.
...
Рейтинг: 0 / 0
25 сообщений из 59, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно написать общение объектов через сокеты?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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