Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24

Приложение, выполняющее обсчет моделей здания

27.11.2011, 15:20. Показов 3574. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
[bold]Доброго времени суток всем читающим![/bold]

Требуется совет общего характера.
А именно: необходимо создать приложение, выполняющее обсчет моделей здания, структура модели не известна и определяется на этапе проектирования здания. Может быть оччень большой, однако дозволяется её (эту модель) разбить на модули, и обсчитывать на машинах в сети.
Как лучше поступить в этом случае?
Использовать RMI или ...?
Я с этим абсолютно не сталкивался, так делал мелочевку в SDK, а тут приспичило.
Самое мерзопакостное заключается в том, что может понадобится обсчитывать несколько моделей сразу, притом что основная работа (CAD) не должна прерываться.
Да еще и задел на будущее нужен: это чтобы серверная часть производила мониторинг обновления файлов клиента, и при необходимости обновляла их серверные копии...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2011, 15:20
Ответы с готовыми решениями:

GUI-приложение, выполняющее указанные функции
нужно создать GUI-приложение, которое будет реализовывать следующие функции: 3.1. По выбору пользователя запрещает или разрешает...

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

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

25
1 / 1 / 0
Регистрация: 12.06.2011
Сообщений: 68
27.11.2011, 21:35
RMI - это у тебя будет синхронная модель, т.е. треды будут висеть и ждать ответов, если моделей и ответов много, то и третов будет много. Сделай на событиях - ты посылаешь событие (объект, на самом деле), они тебе потом обратно. Сделай на select''ах и channel''ах, будет ресурсы есть по минимуму, работать асонхронно и максимально быстро.

На очччень умный совет не тяну, но...
0
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
27.11.2011, 22:22  [ТС]
Цитата Сообщение от Chinook
RMI - это у тебя будет синхронная модель, т.е. треды будут висеть и ждать ответов, если моделей и ответов много, то и третов будет много. Сделай на событиях - ты посылаешь событие (объект, на самом деле), они тебе потом обратно. Сделай на select''''ах и channel''''ах, будет ресурсы есть по минимуму, работать асонхронно и максимально быстро.

На очччень умный совет не тяну, но...
Спасибо подумаю...
0
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
27.11.2011, 22:41
Насколько интенсивным планируется взаимодействие между модулями?

Не стоит отбрасывать идею RMI, если использовать RMI лишь для передачи обработанной информации, то я не вижу здесь места утверждению: "треды будут висеть и ждать ответов", хотя select/channel подход и является одним из наименее ресурсоемких (т.к. это прямое использование socket''ов), но проектирование протокола общения, обработку ошибок передачи и многое другое придется программировать самостоятельно.

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

С уважением,
Владимир
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
27.11.2011, 22:45
Вы очень общий вопрос задали.
Если вопрос про синхронное или асинхронное общение между клиентом и сервером, то в вашем случае наверное предпочтительнее асинхронное, потому что задание выполняется сервером долго. И в RMI и в сокетах можно организовать обе модели.
0
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
28.11.2011, 08:40  [ТС]
to mselez:
Требуется приложение выполняющее задачи распределенных вычислений.
Я думаю нагрузка на сервер должна быть относительно небольшой поскольку основную работу предстоит выполнять клиентам, между ними распределяется основной объем вычислительной нагрузки по обсчету модели, то биш сервер сбрасывает клиенту задание и далее либо периодически опрашивает клиентов о готовности своей части, либо ожидает их отчета. Так что, я думаю режим работы системы все же будет асинхронным.

to boombastik:
Насчет интенсивности взаимодействия между модулями, пока сказать сложно, по идее горизонтальных связей между модулями быть не должно, все взаимодействие должно происходить через сервер, с другой стороны с любой клиентской машины необходима возможность инициировать обсчет, и контролировать его состояние. Ко всем неприятностям добавляется еще то, что может потребоваться производить обсчет и не одной модели одновременно, а в довесок и мониторинг состояния файлов на машинах клиентов (хотя эту часть, мне кажется, лучше вынести в отдельный модуль).
JMS...надо подумать...
Спасибо Всем!
0
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
28.11.2011, 08:45  [ТС]
Цитата Сообщение от k_lexx
to mselez:...
to boombastik:...
Странно... Все Enter-ы сожрал, а в Konqueror-e все нормально было %(
0
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
28.11.2011, 14:37  [ТС]
Прошу еще немного пояснений, я тут немного поковырялся с сокетами вроде работает как надо, во всяком случае тестовая "коротышка", порылся в документации, и все равно остался в некотрых сомнениях - с чем все-таки удобнее работать с каналами, сокетами или все-же задействовать RMI, тем более что по первым прикидкам объем работы приблизительно одинаковый.
Или эти два механизма равноценны применительно к локальной сети?
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
28.11.2011, 16:52
Каналы, сокеты или RMI ?
Каналы - это, очевидно, имеются в виду усовершенствованные сокеты (java.nio).
Быстродействие самое высокое у каналов, а удобство программирования - у RMI.

RMI автоматически меняет протокол связи при необходимости. Например, если клиент за файерволом и не может открыть сокетное соединение, то RMI использует HTTP протокол. А всего у него штук 6 внутренних протоколов.
RMI могут быть существенно медленнее, чем сокеты, по быстродействию.

Традиционные сокеты позволяют передавать обьекты (ObjectOutputStream), а в каналах все вращается вокруг ByteBuffer и чтобы передать/прочитать обьект нужны определенные усилия.
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
28.11.2011, 17:00
PS Удобнее работать с тем, что вы лучше знаете. Мне кажется сокеты - нормальный вариант.
0
1 / 1 / 0
Регистрация: 12.06.2011
Сообщений: 68
28.11.2011, 23:40
Чем удобны каналы, так это тем, что при самом высоком быстродействии не надо заботится от скорости соединения и, соответственно, времени отклика. Каналы регистрируются в контроллере, и твой код по обработке будет вызван в тот момент, когда канал заработает.

По поводу протоколов я бы лично не стал заморачиваться: задача явно не для публичного использования, поэтому протоколы могут быть открыты, какие надо.

По поводу бОльшего знания - тоже. Судя по всему к моменту окончания работ, команда будет знать выбранный технологический путь на уровне его разработчиков (просто придется знать), тогда какой смысл брать то, что знаешь, а потом с этим мучаться?
0
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
29.11.2011, 16:20  [ТС]
[bold]Доброго времени суток всем![/bold]

Чей-то мне больше понравилось работать с сокетами, да и общественное мнение склоняется в их пользу.
Задача действительно локальная, от 5 до 25 машин в связке одновременно, за файрвол их прятать не надо, инет стоит отдельно...
Хотя надо-б еще доки почитать, может быть и каналы пойдут...
...тем более, что вот это -
Цитата Сообщение от Chinook
Каналы регистрируются в контроллере, и твой код по обработке будет вызван в тот момент, когда канал заработает
мне оч-чень даже нравится.

Здесь вроде бы ясно!
[bold]RMI Отпадает.[/bold]
Остаются вопросы следующего плана:
Имеет-ли смысл парится над организацией передачи объектов через каналы или использовать отдельные сокеты?
Насколько более удобна/эффективна работа тех и других инструментов?
Мне это пока еще не очевидно, а "ошибка в начале пути" ...
... да-а-а, это почти крах проекта!

[bold]Спасибо всем![/bold]
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
29.11.2011, 17:26
Цитата Сообщение от k_lexx
Имеет-ли смысл парится над организацией передачи объектов через каналы или использовать отдельные сокеты?
Каналы удобны, если вы пересылаете примитивные типы (byte, int,..), поскольку все операции ведутся через байтовый буфер. Если вы не хотите свой протокол создавать, а пересылать сразу обьекты, то проще наверное обычные сокеты с использованием ObjectStream.

Преимуществ у каналов два - прямое размещение буфера в памяти и неблокирующий режим чтениязаписи.
0
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
29.11.2011, 18:42
Цитата Сообщение от mselez
Каналы удобны, если вы пересылаете примитивные типы (byte, int,..), поскольку все операции ведутся через байтовый буфер. Если вы не хотите свой протокол создавать, а пересылать сразу обьекты, то проще наверное обычные сокеты с использованием ObjectStream.
Не согласен. Объекты пересылать через каналы так же просто как и через сокеты:
Code
1
2
3
4
5
6
7
8
9
10
...
SocketChannel channel = SocketChannel.open();
channel.connect(new InetSocketAddress(host, port));
ObjectOutputStream out = new ObjectOutputStream(Channels.newOutputStream(channel));
...
out.writeObject(new MyObject());
out.flush();
...
out.close();
channel.close();

Цитата Сообщение от mselez
Преимуществ у каналов... неблокирующий режим чтениязаписи.
Согласен. Здесь подробности:
http://java.sun.com/developer/... eases/nio/
http://java.sun.com/j2se/1.4.2... index.html

The New I/O features introduced to the J2SE version 1.4 Beta release provide exciting new ways to improve the performance of your programs. By taking advantage of the new capabilities, not only will they be faster but they can be much more scalable because you won''t have to worry about tasks like one thread per connection. This is especially important on the server side, greatly increasing the possible number of simultaneous connections supported.
Так что если выбор остановили на Socket/ах, то рекомендую использовать NIO

С уважением,
Владимир
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
29.11.2011, 19:07
Цитата Сообщение от boombastik
Объекты пересылать через каналы так же просто как и через сокеты:
Возможно. Я не пробовал, но натыкался на обсуждения этой проблемы. Как я понял, дело в том, что получить обьект через ObjectInputStream можно только если он полностью прочитан в буфер из сети. А это конфликтует с неблокирующим режимом работы канала, т.к. обьект может загружаться в буфер с паузами из-за задержек в сети. По крайней мере, у меня сложилось впечатление, что это отнюдь не "просто". Буду рад, если выяснится, что это впечатление ошибочное.
0
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
30.11.2011, 01:37
хе-хе, вопрос конечно интересный, приведенный выше код работает, но стресс-тесты не проводились, надо будет выяснить, что говорят парни из Sun и др. программисты на этот счет
0
1 / 1 / 0
Регистрация: 15.02.2010
Сообщений: 311
30.11.2011, 09:49
Цитата Сообщение от k_lexx
[bold]Доброго времени суток всем читающим![/bold]

Требуется совет общего характера.
А именно: необходимо создать приложение, выполняющее обсчет моделей здания, структура модели не известна и определяется на этапе проектирования здания. Может быть оччень большой, однако дозволяется её (эту модель) разбить на модули, и обсчитывать на машинах в сети.
Я делал нечто похожее в системе, которая принимает задания на создание документов, раздает их rendering серверам в сети и принимает обратно результаты. Система построена на HTTP. Есть определенный API в форме описания XML структур запросов и ответов. Взаимодействие исключительно по схемам "послал задание-жди ответа" или "послал задание-периодически проверяй статус", причем приложение по выбору может использовать любую из двух. Чаще всего второе, потому что клиентские приложения не имеют "слушающего" порта. Web-сервера имеют, поэтому между ними используется первое.
0
0 / 0 / 0
Регистрация: 27.11.2011
Сообщений: 24
30.11.2011, 10:33  [ТС]
[bold]Доброго времени суток Всем читающим![/bold]

[bold]to boombastik & mselez[/bold]
из вот этого (Спасибо boombastik!):
[bold]Socket Channels[/bold]

Moving on from file channels takes us to channels for reading from and writing to socket connections. These channels can be used in a blocking or non-blocking fashion. In the blocking fashion, they just replace the call to connect or accept, depending on whether you are a client or a server. In the non-blocking fashion, there is no equivalent.
ясно что каналы могут работать как в блокирующем так и неблокирующем режиме, тогда возникает вопрос такого плана: теряются ли преимущества использования каналов при использовании их в блокирующем режиме, и насколько?
Может быть имеет смысл подтверждать доставку каждого объекта используя неблокирующий режим, или задействовать иные механизмы управления?
Да-а-а, заморочка!... %)

[bold]to mag2005[/bold]
Я в принципе так и планирую сделать...
Только вот с XML пока в раздумьях, готовить здесь, парсить там, потом наоборот...
...надо подумать, хотя гибкость управления моделями здесь будет просто великолепная, я бы сказал на высшем уровне!
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
30.11.2011, 17:13
По поводу преимуществ неблокирующего режима. На этом форуме уже где-то обсуждали. Вкратце, основное преимущество неблокирующего режима заключается в том, что одним потоком обслуживаются все клиенты, т.е. вроде не надо на каждого клиента заводить свой поток. Этот один поток в цикле просматривает селектор, в котором зарегистрированы клиентские каналы, и обслуживает операции вводавывода для тех каналов, которые в данный момент к этому готовы.

Если работа сервера только в этом и состоит, что прочитать запрос и отправить готовый ответ, то этот один поток легко справится, сомнений нет.

Если же ответы на запросы надо генерировать и все запросы разные по тяжести, то их целесообразно обрабатывать в отдельных потоках - worker threads. Таким образом, мы одним потоком не обойдемся, хотя требуемое количество worker threads наверняка меньше, чем количество клиентов (не все запросы равны по тяжести обработки).

Впрочем, высказывалось мнение, что экономия в количестве открытых потоков может и не стоит того, чтобы затевать весь этот сыр-бор, а просто открывать на каждого клиента свой поток, который читает запрос -> готовит ответ -> отправляет ответ.

Что касается проблемы с чтением обьектов, то не уверен, что и блокирующий режим от этого защищен. Просто не знаю. Мы пока работаем с байтами, т.е. определяем начало сообщения, ждем когда конец придет и только после этого обрабатываем. Если в буфере обнаружено начало сообщения, но нет конца, то делаем compact() . Такой подход был вынужденный, потому что компонент, который слал сообщения, был на С, а байты - они и в Африке байты. А сейчас мы и между java компонентами так продолжаем "общаться".
0
0 / 0 / 0
Регистрация: 22.07.2009
Сообщений: 457
30.11.2011, 17:21
PS. Склоняюсь к мнению, что преимущества неблокирующего режима очевидны, если количество одновременно подключенных клиентов исчисляется сотнями , если не тысячами. Если их 10, то скорее всего разницы не почувствуете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.11.2011, 17:21
Помогаю со студенческими работами здесь

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

Разработайте приложение, выполняющее построение флагов: Гайана, Куба
Нужно через open GL.Помогите очень нжно))

Создать приложение, выполняющее логические операции над множествами
Создать приложение, выполняющее логические операции над множествами. Пользователь щелчком мыши включает или исключает элемент одного из...

Написать приложение выполняющее запрос к БД и возвращающее ответ используя CORBA
Здравствуйте, задали задание по ИБ распределённых ВС. Нужно выполнить любой запрос к БД используя CORBA. В интернете ничего толкого пока не...

Разработать приложение, выполняющее математические действия над двумя операндами
Реализовать приложение, выполняющее математические действия над двумя операндами (числовыми и символьными), в двух вариантах: 1. Ввод...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru