![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: нет Всего: 38 |
Привет всем!
Ребята, наставьте на путь истинный. Собственно задача такая: 1. Процесинг банковских карточек: баланс, снятие, депозит и т.д. 2. Есть специальные службы, которые предоставляют данную функциональность по определенному протоколу через TCP-IP. 3. Есть написанная либа, которая все функции по работе с этими сервисами и выполняет. 4. Необходимо ее переписать так, что могло работать одновременно несколько пользоателей, так как предполагается эту либу использовать в web-приложении. 5. Взаимодействие с удаленным сервисом организовано через сокеты. В этой области пока ничего не рублю. Как типа все должно работать? Нам предоставляют IP и порты, куда мы можем коннектится через сокеты, отправлять запросы в определенном формате, запакованные в байты и назад получать ответы в таком же виде. Вопросы собственно такие: а) Обязательно ли закрывать сокет после каждого его использования? Если нет, то можно ли организовать пул таких соединений? (Но вообще, я так понимаю, все зависит от того, как организована серверная часть: если она не поддерживает многопоточности, то будет блокировка на клиенте, пока не закончится предыдущий запрос. Ведь так?) б) Если серверные сокеты (в моем случае) немногопоточны, то надо будет организовывать пул из предоставленных нам каналов. Держать ли сокеты в этом случае открытыми? в) Какие стримы мне использовать для быстроты отправки и получения? г) что такое SocketChannel и Selector и нужны ли они в моем случае? Может есть, конечно, какие-то и другие вопросы, но я их пока не вижу. А что-то важное точно запряыталось... Вот пример кода использования сокетов, который есть. Что в нем изменить, что бы была возможность нескольким пользователям одновременно отправлять запросы?
В общем, мож подскажите, что почитать? -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 2 Всего: 118 |
Не совсем понятно со следующими вопросами:
1. Служба, с которой можно работать через TCP/IP - она серверная ? Т.е. к ней можно одновременно приконектиться несколькими клиентами ? 2. Библиотека, которая выполняет всю работу - она что предоставляет наружу ? API ? Она тред сейфная ? Если предположить, что на первый вопрос ответ - да, серверная, а на второй - предоставляет некоторый API, то по идее надо просто написать Web-приложение, которое будет на сервлет принимать запросы от клиентов и вызывать либо через API. По идее это все. |
|||
|
||||
| MisterCleric |
|
||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: нет Всего: 38 |
Да.
Можно, но пока не известно одновременно ли.
Это моя библиотека, которая будет клиентов к тем сервисам. А заодно она будет предоставлять API для клиентских приложений. В моем случае это WEB.
Вот этот вопрос меня и смущает. Так метод, который посылает запросы через сокет как synchronized. А в многопользовательском режиме это будет выглядеть как все ждут одного, так как канал получается узковатым. От этого надо избавится. Плюс есть такое желание как "батчевые операции". Вот почему я и спрашивал: обязательно ли закрывать сокет сразу после его использования? -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||||||
|
|||||||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 2 Всего: 118 |
Под "серверная" я подразумевал, что у нее открыт серверный сокет, который может обслуживать много клиентов одновременно.
Если это не так, то твоя задача решения не имеет - каждый клиент будет эдать остальных. Если же одновременно может, то тебе надо просто переписать несколько библиотеку. Если у тебя класс, который работает с внешним API через сокет тредсейфный, то проблем по идее быть не должно. |
|||
|
||||
| cube |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 11.4.2007 Репутация: нет Всего: 3 |
сам имел опыт работы в банке...
ну лично мое мнение: Там по любому открыт серверсокет
конечно он должен быть как synchronized, и избавиться от этого не получится... Батчевые операции, я так понял это типа как addBatch() в jdbc, но это же не говорит что ты должен выполнять их "по-этапу"... Накопи на клиенте эти операции, а потом как и в jdbc вызови executeBatch()в этом же порядке отправишь их серверу. Узкое место? Открой еще сокет на клиенте, подключись к серверу...Да, как ты писал где-то выше - ты можешь создать пул таких соединений. Потом при тесте ты сможешь лучше определить какой тебе пул и на сколько соединений лучше создавать... Я понимаю что на первый взгляд есть библиотека, нужно только написать клиента - задача выглядит легко, но камней везде до фига... Страх - велик, но руки делают!))) |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Работа с сетью | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |