|
|
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
Добрый день, знатоки. Подскажите, пожалуйста, как используя tcp socket написать клиента и сервера, так чтоб клиент мог "опосредованно" пользоваться методами сервера и отображать результат работы методов сервера. Примеры которые удалось нагуглить все только на передачу байтов, строчек. А так чтобы клиент мог работать через tcp с методами сервера не удалось найти. Может, конечно, не умею хорошо искать :) Может так вообще нельзя. Сокет же просто канал создает для передачи байтов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 16:30 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
Позанудствую и порекомендую к ознакомлению http://en.wikipedia.org/wiki/OSI_model Пишешь сервлет и, о чудо. HTTP ведь тоже работает поверх TCP! Задача решена. Вызов методов через TCP в Java называется RMI. Но зачем тебе такой анахронизм? TCP не реализует никакого протокола уровня приложения. Это просто передача байтов. Тебе же нужно либо реализовать свой собственный протокол. Либо использовать существующие - HTTP, RMI, Hessian, protobuf и прочие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 16:36 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо. ну вот в том то и дело. я сам удивился немного. препод сказал, что нужно написать сервак для работы с бд(сервак1), сервак(сервак2), обрабатывающий запросы от клиента и клиента. для связи можно использовать tcp/udp/rmi/servlet и есть интерфейс, с которым клиент может работать. вот я запутался, как использовать tcp и udp. получается нужно брать сервак1-сервак2 rmi, а сервак2-клиент - сервлет. единственное хотел сделать клиента консольным. а два раза rmi использовать нельзя. вообщем странно немного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 16:44 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
mr_virtus, Вероятно у тебя задача изучить Socket API в Java, а вы её как-то не верно интерпретировали? Я бы все же с преподом выяснил побольше конкретики, а потом уже на форум за советами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2015, 16:46 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
сделал в итоге связку rmi и сервлет. 1.Есть сервер, который работает с бд. 2.Есть сервер, который принимает запросы от клиента. Для этого сервера написан сервлет. Сервер 1 и Сервер2 работают по rmi. Не пойму, как мне сделать, чтоб соединение между сервером1 и сервером2 всегда было одно, при этом запросов от клиентов может быть много. То есть сервлет обрабатывает запросы от клиента. Но соединяться с базой данных, то есть с сервером 1 может только один клиентский запрос. Остальные в это время ждут пока освободится соединение. То есть сервер2 работает как коммутатор. Подскажите, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2015, 18:49 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
может я как-то "криво" описал свою проблему? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 08:28 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
mr_virtusможет я как-то "криво" описал свою проблему? :) Через Executors.newSingleThreadExecutor(); создаешь однопоточный ExecutorService, который будет все задачи синхронизировать в очередь. Соответственно однин поток - одно соединения. Клиентские потоки можно либо блокировать через Future.get(), либо отпускать, а Future куда-нить складывать или не использовать вообще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 09:00 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, а можно ещё помочь? Вот мой сервлет: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. serverCommutator - создает соединение, и имеет методы для работы с бд. все через rmi. мне в сервлете нужно использовать Executors.newSingleThreadExecutor();? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 12:44 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
mr_virtus, Ну, где-то между сервлетом и работой с БД. Не забудь привязать shutdown() к Servlet Destroy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 14:03 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
При одно-сокетной работе один "запрос-ответ-тормоз" может затормозить всю очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 14:11 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
mr_virtus, Можно попробовать настроить serializable транзакции :) тогда любые конкурирующие транзакции к БД будут выстраиваться в очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 14:24 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо. а правильно я понимаю, что если я сделал serverCommutator как singleton класс, а этот класс у меня создает соединение с бд, то по сути у меня с бд всегда будет только одно соединение открыто. А клиенты в свою очередь дергать методы этого синглетон класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 14:52 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
mr_virtusа правильно я понимаю, что если я сделал serverCommutator как singleton класс, а этот класс у меня создает соединение с бд, то по сути у меня с бд всегда будет только одно соединение открыто. А клиенты в свою очередь дергать методы этого синглетон класса? Singleton здесь немного не в тему. Ну, разва что если его ещё завернуть в synchronized, то да. Будут потоки работать по очереди. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 15:10 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, а вот интересно.... потоки... я вот сколько ни читал про сервлеты, там как-то про потоки не понятно написано. пишут только что вебконтейнер сам управляет экземплярами класса сервлет. когда дофига клиентов он может увеличить количество экземпляров сервлетов. то есть как этот "туман" связать с потоками как то не ясно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 15:12 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
mr_virtusпотоки... я вот сколько ни читал про сервлеты, там как-то про потоки не понятно написано. пишут только что вебконтейнер сам управляет экземплярами класса сервлет. Ты начинаешь про потоки, но спрашиваешь про экземпляры. Это перпендекулярные понятия. Многие потоки могут использовать один синглтон. mr_virtusкогда дофига клиентов он может увеличить количество экземпляров сервлетов. Нет, не из-за этого. Тут много разных факторов - старая спецификация и обратная совместимость, интерфей SingleThreadModel и заточка JEE под распределенную систему. Их не то чтобы много. Просто нельзя закладываться на то что этот экземпляр один. Это не значит что их много. Экземпляр почти всегда один. Но на это категарически нельзя завязывать логику. mr_virtusто есть как этот "туман" связать с потоками как то не ясно... Потоки и экземпляры совершенно разные понятия. Если это не совсем понятно, надо потратить время и разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 15:22 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, спасибо. появились прояснения :). ключевой момент - что разные web клиенты запускаются в разных потоках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 15:26 |
|
||
|
tcp socket
|
|||
|---|---|---|---|
|
#18+
mr_virtusключевой момент - что разные web клиенты запускаются в разных потоках. Для первичного понимания это так. Но для точности, это так только с уточнением. Утверждение верно "в один момент времени". Потоки переиспользуются и если сейчас через поток заходил Вася, то через минуту этот же поток может использовать Петя. Этот факт приводит к частым ошибкам у новичков, когда Петя вдруг видит данные Васи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2015, 15:29 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38854339&tid=2125950]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
46ms |
get topic data: |
7ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 309ms |

| 0 / 0 |
