Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WebSocket (Java сервер) Какие есть способы? Нужен HTTP сервер в проге JavaWebStart 
:(
    Опции темы
ZVano
Дата 28.10.2015, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Прежде всего - мой уровень в Java нулевой. Пришлось заняться в связи с войной браузеров.

Задача: Нужно из браузерного JavaScript вызывать функции *.dll, *.so (ЭЦП, работа с оборудованием, работа с принтером)
Раньше этим занимался JavaApplet, но в связи с отказом содателей браузеров от поддержки NPAPI они перестали работать (в Chrome Java уже не работает, в Mozilla Firefox перестанет работать через год).

Идея решения такова:
1. Написать Java-приложение, которое будет запускаться через JNLS (Java Web Start).
2. Java-приложение должно уметь работать с dll.
3. Java-приложение должно открывать порт для чтения HTTP-трафика (обеспечивать серверную сторону WebSocket).
4. Написать код JavaScript, который будет обращаться к Java-приложению через WebSocket.

Т.е. загрузили Web-страницу, вызвали загрузку JNLP. После этого пуляем JSON через WebSocket и получаем асинхронные ответы.


Вопросы: Как реализовать п3?
Подозреваю что в JDK должно быть готовое решение, но я его не нашел - все примеры используют Tomcat или GlassFish.
Есть рабочий пример UploadServer, который может принимать файлы по HTTP.  Взят отсюда Пример простейшего серверного приложения на Java и запилен в проект NetBeans 8 (по умолчанию висит на порту 8011).
Но тут прийдется анализировать заголовки, извлекать из "грязного" текста нужное мне тело пакета (данные в формате JSON).
Прошу сориентировать в этом вопросе. 
Может есть простой готовый класс основанный на событиях.
Произошло событие "пишли данные" в параметре data лежит тело пакета, а в параметре headers HTTP заголовки.

Может первичная задача вообще решается не так, как я думаю.

Это сообщение отредактировал(а) ZVano - 28.10.2015, 12:11

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  UploadServer_md5_b15d4a2ab8a26fa453bcab1e3d141e53.zip 26,85 Kb


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
LSD
Дата 28.10.2015, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 19
Всего: 537



Зачем вам вообще веб часть при наличии полноценного десктоп приложения?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ZVano
Дата 28.10.2015, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Потому что уже написаны мегатонны кода и никто переделывать его не будет. 
Техзадание было на Web-приложение.


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
LSD
Дата 28.10.2015, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 19
Всего: 537



Disclaimer: то что вы пытаетесь реализовать это извращение с кучей подводных камней (типа как обойти фаервол, где и как смотреть логи и т.п.). И лучше все таки изменить архитектуру, хотя бы показывать приложение внутри JxBrowser (или в чем-то подобном).

Если же надо именно реализовать вебсервер, то надо просто взять готовую реализацию вебсервера. Например NanoHTTPD, и написать свои обработчики событий.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ZVano
Дата 28.10.2015, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Цитата(LSD @  28.10.2015,  16:57 Найти цитируемый пост)
Disclaimer: то что вы пытаетесь реализовать это извращение с кучей подводных камней

Скорее всего я недостаточно понятно описал ситуацию и Вы просто поняли что требуется.
Цитата(LSD @  28.10.2015,  16:57 Найти цитируемый пост)
Если же надо именно реализовать вебсервер

Нужно из JavaScript вызвать функцию dll и получить результат. Все остальное следствие.

Попробую объяснить по другому.

Имеем Web-приложение с серверной частью на PHP+Apache.
Клиенты в браузере набивают некие данные (например платежки или отчет в налоговую).
И вот наступает момент, когда нужно наложить на эти данные цифровую подпись (ЭЦП).
Наложением ЭЦП занимается сертифицированная библиотека в *.dll и *.so файлах.
Операция наложения подписи должна происходить на стороне клиента т.к. приватный ключ у него на флешке и гонять его на Web-сервер нельзя.
Что делать?
Выкрутились использованием Java-апплета, который загружается в браузер клиента и предоставляет возможность коду JavaScript вызывать функции dll.
И тут как снег на голову новость о том, что Java-апплеты скоро перестанут работать.
Вот и приходится искать решение.
Как бы Вы поступили в моем случае? 
Какие есть решения, кроме того чтобы выгружать данные для подписи в файл и подписывать его отдельной софтиной?

И эта проблемма не только у нас. Почти все банки вынуждены ее решать. Посмотрите какой вой подняли в теме Firefox прекращает поддержку плагинов NPAPI, за исключением Adobe Flash

PS: кроме наложения ЭЦП нужно  и с железками работать (в некоторых модулях).
Java нужна всего в паре-тройке модулей из нескольких сотен.

PPS:
Цитата(LSD @  28.10.2015,  16:57 Найти цитируемый пост)
Например NanoHTTPD, и написать свои обработчики событий

Спасибо. Вроде подходит. Во всяком случае запущеный пример nanohttpd-websocket отработал - страница браузера отправила пакет с данными и получила его же.
Правда, при билде ругается на то, что не пройден тест. Но это уже вопрос в другую тему.
Цитата

NanoHttpd-Project ................................. SUCCESS [5.872s]
NanoHttpd-Core .................................... FAILURE [1:04.785s]
NanoHttpd-Websocket ............................... SKIPPED
------------------------------------------------------------------------
BUILD FAILURE


Это сообщение отредактировал(а) ZVano - 28.10.2015, 18:39


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
LSD
Дата 29.10.2015, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 19
Всего: 537



Цитата(ZVano @  28.10.2015,  18:24 Найти цитируемый пост)
И вот наступает момент, когда нужно наложить на эти данные цифровую подпись (ЭЦП).
Наложением ЭЦП занимается сертифицированная библиотека в *.dll и *.so файлах.
Операция наложения подписи должна происходить на стороне клиента т.к. приватный ключ у него на флешке и гонять его на Web-сервер нельзя.
Что делать?

Так это просто ключ на флешке или токен который сам все подписывает?


Цитата(ZVano @  28.10.2015,  18:24 Найти цитируемый пост)
Как бы Вы поступили в моем случае? 

It depends...
- Кто использует приложение - внутренние или внешние клиенты. 
- На каких ОС и браузерах оно используется и можно ли сократить этот круг. 
- Планируется ли дальнейшее активное развитие приложения.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ZVano
Дата 29.10.2015, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Цитата(LSD @  29.10.2015,  14:12 Найти цитируемый пост)
Так это просто ключ на флешке или токен который сам все подписывает?

Токен. "Кристалл 1" отсюда и пример JavaApplet отсюда
Не забываем что кроме ЭЦП есть еще обращение к железякам через dll.
Цитата(LSD @  29.10.2015,  14:12 Найти цитируемый пост)
Кто использует приложение - внутренние или внешние клиенты. 

В основном внешние.
Цитата(LSD @  29.10.2015,  14:12 Найти цитируемый пост)
На каких ОС и браузерах оно используется и можно ли сократить этот круг.

ОС Windows для спецмодулей и любые другие для остального.
Браузеров зоопарк и они забиты в ТЗ.
Цитата(LSD @  29.10.2015,  14:12 Найти цитируемый пост)
Планируется ли дальнейшее активное развитие приложения. 

Я не знаю. Это только руководству известно.

Это сообщение отредактировал(а) ZVano - 29.10.2015, 16:25


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
LSD
Дата 30.10.2015, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 19
Всего: 537



В принципе тогда вариантов действительно немного. Или локальный вебсервер или приложение. Мне лично больше нравится вариант с веб браузера внутри Java приложения, т.к.:
1. Тут нет сетевого взаимодействия и нет риска что будет проблемы с сетью из-за фаервола или cross origin request.
2. Диагностика проще, Java приложение может собирать логи свои и вебстраницы и любую дополнительную информацию.
3. Фиксированная версия браузера.
4. Приложение может предоставлять больше функций чем вебстраничка внутри браузера. Нотификации, работа в офлайне, более продвинутая работа с файлами и т.п.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ZVano
Дата 30.10.2015, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Цитата(LSD @  30.10.2015,  15:52 Найти цитируемый пост)
 Мне лично больше нравится вариант с веб браузера внутри Java приложения,

А как в этом случае использовать уже существующий код, который крутится на внешнем Web-сервере?
Апплеты будут работать в Java-browser?
С куками он умеет работать?
JavaScriprt работает?
Возможности HTML5 поддерживает?

Это сообщение отредактировал(а) ZVano - 30.10.2015, 16:43


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
LSD
Дата 30.10.2015, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 19
Всего: 537



  •  Вы через Java Web Start ставите пользователю приложение. 
  •  Это приложение внутри себя на панели открывает ваш вебсайт. 
  •  У вашего приложения есть контроль над страницей, оно может слушать события, экспортировать некие функции для JS и самостоятельно вызывать JS функции. Есть полный контроль над DOM.

Вопрос только в том какую использовать реализацию. 
  •  Есть JxBrowser это полноценный Chromium (ну может с небольшой задержкой), но он платный и стоит не мало. 
  •  Есть DJ Native Swing позволяет показывать браузер внутри Swing приложения и взаимодействовать с ним. Если я правильно понял, то он использует XULRunner, считай это тот же Firefox.
  •  В JavaFX есть Embedded Browser API, но там могут быть проблемы с совместимостью.
  •  Есть Lobo Evolution реализация HTML движка на Java, опять вопросы по совместимости.
Я их распределил в том порядке, в котором сам стал бы их рассматривать.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ZVano
Дата 30.10.2015, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



LSD, спасибо. 
Буду читать и щупать. Есть еще год до момента "П...ц" (извините за мой французский smile )


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
Sajtran
Дата 31.10.2015, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.10.2008
Где: Мегион

Репутация: нет
Всего: 2



мда, проблема действительно
доступ к локали компа всё больше обрывается через WEB
плагинами только к кажому браузеру отдельно если и это не перекроют
без вариантов, кроме как писать на старый добрый десктоп

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
ZVano
  Дата 6.6.2016, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Внимание! Не тратьте время на тупиковую ветвь.
Этот подход не будет работать, если Ваш Web-ресурс (с которого запускается JNLP) находится под HTTPSом.
Браузер будет блокировать все HTTP, HTTPS, WS и WSS запросы к ресурсу с self-signed сертификатом. Нормальный сертификат для localhost Вы не получите даже за деньги. Вы никак не обойдете это ограничение
Т.е. Вы не сможете присоединиться из JAVA-script к локальному  WebApi-сервису на Java.
Правда, можно руками добавить сертификат в список доверенных в браузере - тогда будет работать (но это совсем не феншуйно).

Если же Ваш Web-ресурс работает по HTTP, то подход работоспособен и весьма удобен в использовании.

PS: Безусловно блокируются фоновые запросы (выводится ошибка в консоль браузера).
Если же ссылку ввести в поле URL браузера, то он(браузер) выдаст страницу с предупреждением и даст возможность добавить сертификат в список доверенных.

Это сообщение отредактировал(а) ZVano - 6.6.2016, 16:40


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
LSD
Дата 7.6.2016, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15708
Регистрация: 24.3.2004

Репутация: 19
Всего: 537



Цитата(ZVano @  6.6.2016,  17:33 Найти цитируемый пост)
Нормальный сертификат для localhost Вы не получите даже за деньги. Вы никак не обойдете это ограничение

А кто мешает в hosts прописать 
Код

my-site.com 127.0.0.1

?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
ZVano
Дата 7.6.2016, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 258
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: нет
Всего: 4



Цитата(LSD @  7.6.2016,  12:01 Найти цитируемый пост)
А кто мешает в hosts прописать 

Никто не мешает. 
Но это снова изменения руками. Причем нужно обладать соответствующими правами.
Когда я писал "Вы никак не обойдете это ограничение" подразумевалось что решение не будет работать без ручного вмешательства. (Другое решение этой проблемы - написать в инструкции пользователя "Наберите в строке URL значение https://127.0.0.1:2016 и примите сертификат, который вам предложат со страшными предупреждениями") 
Представьте себе ситуацию - пользователям https://forum.vingrad.ru нужно добавить строчку в hosts чтобы зайти на сайт. Много было бы таких отважных? Причем тут собрались умные люди.

Это сообщение отредактировал(а) ZVano - 7.6.2016, 14:39


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Работа с сетью | Следующая тема »


 




[ Время генерации скрипта: 0.1682 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.