Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / tcp socket / 20 сообщений из 20, страница 1 из 1
12.01.2015, 16:30
    #38852401
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Добрый день, знатоки.

Подскажите, пожалуйста, как используя tcp socket написать клиента и сервера, так чтоб клиент мог "опосредованно" пользоваться методами сервера и отображать результат работы методов сервера.

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

Может, конечно, не умею хорошо искать :) Может так вообще нельзя. Сокет же просто канал создает для передачи байтов.
...
Рейтинг: 0 / 0
12.01.2015, 16:36
    #38852412
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Позанудствую и порекомендую к ознакомлению
http://en.wikipedia.org/wiki/OSI_model
Пишешь сервлет и, о чудо. HTTP ведь тоже работает поверх TCP! Задача решена.

Вызов методов через TCP в Java называется RMI. Но зачем тебе такой анахронизм?
TCP не реализует никакого протокола уровня приложения. Это просто передача байтов. Тебе же нужно либо реализовать свой собственный протокол. Либо использовать существующие - HTTP, RMI, Hessian, protobuf и прочие.
...
Рейтинг: 0 / 0
12.01.2015, 16:44
    #38852431
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz, спасибо.

ну вот в том то и дело. я сам удивился немного.

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

для связи можно использовать tcp/udp/rmi/servlet

и есть интерфейс, с которым клиент может работать.

вот я запутался, как использовать tcp и udp. получается нужно брать сервак1-сервак2 rmi, а сервак2-клиент - сервлет.

единственное хотел сделать клиента консольным. а два раза rmi использовать нельзя.

вообщем странно немного.
...
Рейтинг: 0 / 0
12.01.2015, 16:46
    #38852436
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
mr_virtus,

Вероятно у тебя задача изучить Socket API в Java, а вы её как-то не верно интерпретировали? Я бы все же с преподом выяснил побольше конкретики, а потом уже на форум за советами.
...
Рейтинг: 0 / 0
12.01.2015, 16:47
    #38852437
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz,

спасибо.
...
Рейтинг: 0 / 0
13.01.2015, 18:49
    #38853566
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
сделал в итоге связку rmi и сервлет.

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

Сервер 1 и Сервер2 работают по rmi.

Не пойму, как мне сделать, чтоб соединение между сервером1 и сервером2 всегда было одно, при этом запросов от клиентов может быть много.

То есть сервлет обрабатывает запросы от клиента. Но соединяться с базой данных, то есть с сервером 1 может только один клиентский запрос. Остальные в это время ждут пока освободится соединение. То есть сервер2 работает как коммутатор.

Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
14.01.2015, 08:28
    #38853762
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
может я как-то "криво" описал свою проблему? :)
...
Рейтинг: 0 / 0
14.01.2015, 09:00
    #38853779
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
mr_virtusможет я как-то "криво" описал свою проблему? :)
Через
Executors.newSingleThreadExecutor();
создаешь однопоточный ExecutorService, который будет все задачи синхронизировать в очередь. Соответственно однин поток - одно соединения.
Клиентские потоки можно либо блокировать через Future.get(), либо отпускать, а Future куда-нить складывать или не использовать вообще.
...
Рейтинг: 0 / 0
14.01.2015, 10:17
    #38853844
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz,
Cпасибо :)
...
Рейтинг: 0 / 0
14.01.2015, 12:44
    #38854011
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz,

а можно ещё помочь? Вот мой сервлет:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class ServletCommutator extends javax.servlet.http.HttpServlet {

    private static String[] history = null;

    ServerCommutator serverCommutator = null;

    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        String login = request.getParameter("login");
        String password = request.getParameter("password");
        serverCommutator = ServerCommutator.getInstance();
        serverCommutator.login(login, password);
        history = serverCommutator.getHistory(login);
        request.setAttribute("history", history);
        request.getRequestDispatcher("history.jsp").forward(request, response);
    }
}


serverCommutator - создает соединение, и имеет методы для работы с бд. все через rmi.

мне в сервлете нужно использовать Executors.newSingleThreadExecutor();?
...
Рейтинг: 0 / 0
14.01.2015, 14:03
    #38854184
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
mr_virtus,

Ну, где-то между сервлетом и работой с БД. Не забудь привязать shutdown() к Servlet Destroy.
...
Рейтинг: 0 / 0
14.01.2015, 14:11
    #38854199
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
При одно-сокетной работе один "запрос-ответ-тормоз" может затормозить всю очередь.
...
Рейтинг: 0 / 0
14.01.2015, 14:24
    #38854215
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
mr_virtus,

Можно попробовать настроить serializable транзакции :) тогда любые конкурирующие транзакции к БД будут выстраиваться в очередь.
...
Рейтинг: 0 / 0
14.01.2015, 14:52
    #38854270
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz,
спасибо.

а правильно я понимаю, что если я сделал serverCommutator как singleton класс, а этот класс у меня создает соединение с бд,

то по сути у меня с бд всегда будет только одно соединение открыто. А клиенты в свою очередь дергать методы этого синглетон класса?
...
Рейтинг: 0 / 0
14.01.2015, 15:10
    #38854311
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
mr_virtusа правильно я понимаю, что если я сделал serverCommutator как singleton класс, а этот класс у меня создает соединение с бд,
то по сути у меня с бд всегда будет только одно соединение открыто. А клиенты в свою очередь дергать методы этого синглетон класса?

Singleton здесь немного не в тему. Ну, разва что если его ещё завернуть в synchronized, то да. Будут потоки работать по очереди.
...
Рейтинг: 0 / 0
14.01.2015, 15:12
    #38854314
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz,

а вот интересно....
потоки... я вот сколько ни читал про сервлеты, там как-то про потоки не понятно написано.

пишут только что вебконтейнер сам управляет экземплярами класса сервлет.

когда дофига клиентов он может увеличить количество экземпляров сервлетов.

то есть как этот "туман" связать с потоками как то не ясно...
...
Рейтинг: 0 / 0
14.01.2015, 15:22
    #38854333
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
mr_virtusпотоки... я вот сколько ни читал про сервлеты, там как-то про потоки не понятно написано.
пишут только что вебконтейнер сам управляет экземплярами класса сервлет.

Ты начинаешь про потоки, но спрашиваешь про экземпляры. Это перпендекулярные понятия. Многие потоки могут использовать один синглтон.

mr_virtusкогда дофига клиентов он может увеличить количество экземпляров сервлетов.

Нет, не из-за этого. Тут много разных факторов - старая спецификация и обратная совместимость, интерфей SingleThreadModel и заточка JEE под распределенную систему. Их не то чтобы много. Просто нельзя закладываться на то что этот экземпляр один. Это не значит что их много. Экземпляр почти всегда один. Но на это категарически нельзя завязывать логику.

mr_virtusто есть как этот "туман" связать с потоками как то не ясно...
Потоки и экземпляры совершенно разные понятия. Если это не совсем понятно, надо потратить время и разобраться.
...
Рейтинг: 0 / 0
14.01.2015, 15:26
    #38854339
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz,

спасибо. появились прояснения :). ключевой момент - что разные web клиенты запускаются в разных потоках.
...
Рейтинг: 0 / 0
14.01.2015, 15:29
    #38854345
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
mr_virtusключевой момент - что разные web клиенты запускаются в разных потоках.
Для первичного понимания это так.
Но для точности, это так только с уточнением. Утверждение верно "в один момент времени". Потоки переиспользуются и если сейчас через поток заходил Вася, то через минуту этот же поток может использовать Петя. Этот факт приводит к частым ошибкам у новичков, когда Петя вдруг видит данные Васи.
...
Рейтинг: 0 / 0
14.01.2015, 15:32
    #38854350
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
tcp socket
Blazkowicz,

здорово. Очень интересно :)

Спасибо Вам за полезную информацию!
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / tcp socket / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]