Версия Java и библиотеки: SSL + SOCKS (sync,async)

 
0
 
Java
ava
DHT | 21.01.2013, 06:15
Добрый день,
перелопатил кучу языков: Delphi 7, Python 2.7, Go, C++.

На данный момент только C++ (с Boost::Threads и libcurl) могут решить мою задачу нормально, но хочется взглянуть на Java, т.к. бенчмарк асинхронных клиентов поражает скоростью http://wiki.apache.org/HttpComponents/Http...ient4vsHttpCore

Задача:
1) множество асинхронных одиночных запросов (до миллиардов) через SOCKS прокси с поддержкой SSL.
2) многопоточная отправка цепочек POST, GET, JSON, AJAX запросов через SOCKS прокси с поддержкой SSL.

OS  разработки: Windows 7 (64-bit).
OS сервера, где будет работать скрипт: Windows Server 2003, 2008 (32-bit).

1) Подскажите пожалуйста какую версию Java мне изучать?
2) Какие библиотеки лучше подойдут для задача 1 и задача 2?
3) Какая библиотека нужна для создания GUI под Windows?

4) Насколько быстро работают потоки в Java?
5) Сколько потоков можно запустить на процесс?
6) Реально ли отправлять 1000 GET запросов в секунду используя многопоточноть и то же самое используя асинхронные запросы?
7) Не приводят ли блокировки в потоках (например, при получения IP адреса хоста или коннекта к серверу) к тормозам приложения?

Простите за большое кол-во вопросов, но устал начинать изучать новый язык, а потом напарываться на его ограничения.
Все вопросы исключительно под OS Windows.

Спасибо большое заранее всем кто хотя бы дочитал до этой строчки  smile 
Kommentare (6)
ava
Skynin | 21.01.2013, 22:24 #
Смотреть в сторону Jboss Netty

В качестве "рекламы", все что написано Twiterянами на Scala - бежит поверх Netty.
Если она не справится ("готовить" конечно тоже нужно правильно) - то Javу можно забыть для Вашей задачи :)

1) 7ку - 1.7

2) Netty

3) Зависит от времени которое готовы потратить на GUI. Основная - Swing, но нужно украшать и наращивать ее с помощью SwingX и т.п.
SWT - полностью нативный вид, но тоже, только в комплексе c JFace

Если совсем по крутому:
использовать Eclipse RCP (пример работающего приложения и с открытыми исходниками RSSOwl)
или Netbeans RCP - на Swing.

4) в сравнении - с чем? Вообще, они в Java - нативные, поэтому работают "очень быстро", хотя конечно на Си - можно реализовать быстрее.

5) да как бы сколько хотите. Сколько шедулер ОСи выдержит :)

6) см Netty

7) как напишете, так и будет. видел я "многопоточный" код, который из тотальных блокировок - однопоточным становился. Видел и lock-free код на Java.
ava
COVD | 21.01.2013, 23:15 #
Главное отличие Java в том, нет полного контроля за уборкой "мусора". Но если для взаимодействия клиента с сервером используется интернет, который совсем неподконтролен, то непредсказуемость пауз на работу gc (уборщик мусора) приложения не является чем-то ужасным. К тому же, есть возможности оптимизации.

"Спорт высших достижений" на серверной стороне не обязателен. Теоретически всегда можно вместо совершенствования программ пойти по экстенсивному пути  - добавить серверов, распараллелить вычисления (архитектурные решения). И это нужно не столько для "бенчмарков", сколько для повышения надежности системы, удобства поддержки и модификации. Т.е., сравнения скоростей чего-то на ABCD и X-- конечно интересны, но не принципиальны.

Обычно в сложных проектах мастерство владения инструментом важнее инструмента."Используй то, что лучше знаешь". Java популярна в индустрии - сроки, сложность программирования, стандартные решения. Но ее тоже надо осваивать.
ava
DHT | 22.01.2013, 00:39 #
Цитата (Skynin @  21.1.2013,  22:24 findReferencedText)
2) Netty

Промо нравится. Посмторим на деле. Спасибо.

Цитата (Skynin @  21.1.2013,  22:24 findReferencedText)
или Netbeans RCP - на Swing.

Выбор пал на нее. Хоть Exclipse уже и стоит для Python, но не нравится мне он. Думал IDEA бесплатную версию, но там вышеупомянутый Netty (Jboss) не поддерживается.


Цитата (COVD @  21.1.2013,  23:15 findReferencedText)
Обычно в сложных проектах мастерство владения инструментом важнее инструмента."Используй то, что лучше знаешь".

На данный момент лучше всего я знаю Python, но, увы, в Windows он показывает совсем хилую скорость работы с сетью.
Попробовал Google Go, но и тот в Windows блокируется при конвертировании имени хоста в IP адрес, т.е. эквивалентен в "скорости" с Python с его GIL (наверное, Гвидо Ван Росум на них плохо влияет smile ).

Простите за глупый вопрос, но он как раз напрашивается. В Java же нет подобных глобальных блокировок и не важно в какой ОС запускать приложение, т.к. работь оно будет на JVM? Т.е. я не упрусь со временем в то, что Jаva приложение быстрое на Linux, FreeBSD  и медленное на Windows. Верно?
ava
COVD | 22.01.2013, 14:10 #
Разрешение IP адреса происходит через запрос к DNS серверу. Он может отвечать с задержкой, может вообще не ответить в отведенное время. Очевидно, это и есть основная "блокировка" и она не зависит от операционной системы и, тем более, от языка, на котором написана программа. Другое дело, что эти запросы не нужны, если адрес уже задан в виде ххх.ххх.ххх.ххх. Думаю, так и реализовано везде.
ava
DHT | 22.01.2013, 14:37 #
Цитата (COVD @  22.1.2013,  14:10 findReferencedText)
Разрешение IP адреса происходит через запрос к DNS серверу. Он может отвечать с задержкой, может вообще не ответить в отведенное время. Очевидно, это и есть основная "блокировка" и она не зависит от операционной системы и, тем более, от языка, на котором написана программа. 


Тогда спрошу так: может ли приложение на Java запустить множество разных запросов к DNS серверу параллельно? И не ппиведет ли блокировка одного запроса к блокировке других?

Уточняю, т.к. на Python и Go приведет к блокировке под ОС Windows.
ava
COVD | 22.01.2013, 16:23 #
Вы считаете, что в Питоне плохо реализованы сетевые операции и интересуетесь, лучше ли они реализованы в Java? Я не сравнивал. Предполагаю, что вы имеете дело с общими естественными ограничениями пропускной способности.

Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
  COVD   Skynin   DHT
advanced
Absenden