powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Внутренний не статический класс. Верный подход? WebSocket
61 сообщений из 61, показаны все 3 страниц
Внутренний не статический класс. Верный подход? WebSocket
    #39630701
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите правильность такого решения.

У меня есть точка подключения вебсокета на Java (сервер). В нем реализованы методы onOpen, onMessage, onClose и onError.

Речь пойдет о методе onMessage.

Мне не хочется набивать этот метод свичем который будет огромным для всех сообщений которые возможны.

Я сделал такую вот штуку (использовал внутренний не статический класс для обработки сообщений)

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
@ServerEndpoint(value = "/endpoint", configurator = SocketConfigurator.class, encoders=WsEncoder.class, decoders=WsDecoder.class)
public class WsEndpoint {

    private static final Logger LOGGER = LogManager.getLogger(WsEndpoint.class);

    private static final CopyOnWriteArrayList<WsUser> wsWebUsers = new CopyOnWriteArrayList<WsUser>();

    public WsEndpoint() {
        LOGGER.info("ENDPOINT CREATED");
    }

    @OnOpen
    public void onOpen(Session session) {
        LOGGER.info("ENDPOINT ONOPEN");
    }

    @OnMessage
    public void onMessage(Session session, WsMessage wsMessage) {

        new WsOnMessage(session, wsMessage);

    }

    @OnClose
    public void onClose(Session session) {

    }

    @OnError
    public void onError(Session session, Throwable ex) {
        LOGGER.error("ENDPOINT ERROR", ex);
    }

    private class WsOnMessage {

        private Session session;
        private WsMessage wsMessage;

        public WsOnMessage(Session session, WsMessage wsMessage) {
            this.session = session;
            this.wsMessage = wsMessage;

            call();

        }

        private void call() {
            switch (wsMessage.getType()) {
                ...
            }
        }

    }

}



верно ли так делать? Может есть более элегантный способ обработки сообщений?

Спасибо.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630709
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630719
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov MessageHangler ?

пример можно? пожалуйста
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630720
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прямо в документации?
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630724
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы сделал так
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
interface MessageHandler {
    void handleMessage(...)
}

class MyMessageHandler1 implements MessageHandler {}
....
class MyMessageHandler47 implements MessageHandler {}



interface MessageHandlerFactory {
    MessageHandler createMessageHandlerByType(...)
}

class MessageHandlerFactoryImpl implements MessageHandlerFactory{
   MessageHandler createMessageHandlerByType(...)
} 


Как конкретно создавать экземпляры классов внутри "фабрики" - дело такое. Самый простой и топорный подход конечно через switch. Eсли объекты простые, то табличный метод

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
//псевдокод для понимания идеи
Map<MgsType, Class<? extends MessageHandler> messageHandlerMap= {
   type1 --> MyMessageHandler1.class,
   ...
   type47 --> MyMessageHandler47.class
}

messageHandlerMap.get(type).newInstance()



более элегантные (на мой вкус) варианты это создание через механизм dependency injection. особенно если объекты сложные, со своими зависимостями и т.д. В зависимости от кол-ва классов и сложности задачи можно промежуточные варианты использовать. Нет смысла городить огород ради например 3х примитивных классов с конструктором без параметров
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630726
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
хочешь готовый вариант для любого количества сообщений?
согласованно работает с 21341657
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630727
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. SidorovПрямо в документации?

посмотрел. Суть не поменяется.

Я сделаю вот так:

Код: java
1.
2.
3.
4.
5.
6.
session.addMessageHandler(new MessageHandler.Whole<WsMessage>() {
            @Override
            public void onMessage(WsMessage wsMessage) {

            }
        });



Но чем это будет отличаться от этого?

Код: java
1.
2.
3.
4.
@OnMessage
    public void onMessage(Session session, WsMessage wsMessage) {

    }



В первом случае свитч все равно будет, как и во втором.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630729
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop...Мне не хочется набивать этот метод свичем который будет огромным для всех сообщений которые возможны....

AFAIK

В "нормальных языках программирование" ( TM ) есть ссылки на методы, т.ч. в них можно делать массив/HashMap и через него вызывать нужные методы.

В "старой ява" такого нет, т.ч. для каждого обработчика нужно создавать свой класс, что немного "тяжеловестно". В общем, банальный "pattern Command".

В "новой Java" появились closure, в данном случае они вполне могут сделать код чуть проще. Но в closure мне не очень нравится реализация обработки эксепшенов. Т.ч. я против прогресса и за старый код, чуть больше строк, зато понятнее, деревеннее и надежнее )))
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630731
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

Это тут вообще не при чем.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630733
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
Код: java
1.
2.
3.
class MyMessageHandler1 implements MessageHandler {}
....
class MyMessageHandler47 implements MessageHandler {}


а если 300 надо?....
не оптимально, есть вариант проще
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630736
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяа если 300 надо?....
если у нас 300 обработчиков, каждый из которых делает что-то свое то пишем все 300, да

вадяесть вариант проще
расскажи
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630737
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopвадя,

Это тут вообще не при чем.это ты пока начальной стадии.

Leonid KudryavtsevВ "нормальных языках программирование" ( TM ) есть ссылки на методы, т.ч. в них можно делать массив/HashMap и через него вызывать нужные методы.

В "старой ява" такого нет, т.ч. для каждого обработчика нужно создавать свой класс, что немного "тяжеловестно". В общем, банальный "pattern Command".

В "новой Java" появились closure, в данном случае они вполне могут сделать код чуть проще. Но в closure мне не очень нравится реализация обработки эксепшенов. Т.ч. я против прогресса и за старый код, чуть больше строк, зато понятнее, деревеннее и надежнее )))в java давно есть рефлексия, и с ней всё очень просто
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630739
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
На счет рефлексии согласен. Были варианты её использовать.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630740
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaесли у нас 300 обработчиков, каждый из которых делает что-то свое то пишем все 300, даты не понял проблемы
вопрос не в количестве обработчиков, а как их вызвать
у меня на каждую страницу свой java файл обработчиков.
очень наглядно, удобно
и мне не надо их вызывать ни через case , ни через if

всё через рефлексию
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630745
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha, я так понимаю, Вы привели одну из возможных реализаций pattern Command.

Минусы примера, как я вижу:

1 - Factory. В принципе, в 99% задач это даром не надо, если события ходят часто, то проще уйти от ООП и инкапсуляции и, например, передавать обрабатываемые данные через параметры.

Лишняя операция создания объекта лично меня обычно напрягает

2 - много букв, т.к. нужно для каждой операции создавать свой класс. Но тут вполне могут помочь лямбды и клосуры в новой Java. По смыслу будет тоже самое, но буковок в итоге может оказаться меньше и код получится более компактный.

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

вадя....в java давно есть рефлексия, и с ней всё очень просто

IMHO & AFAIK рефлексия:
a) костыль
b) как всякий костыль, прощай производительность

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

IMHO & AFAIK
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630749
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
что скажете на счет моего варианта?
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630751
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevIMHO & AFAIK рефлексия:
a) костыль
b) как всякий костыль, прощай производительность

Смысла использовать рефлексию для данной задачи, лично я полностью не вижу. Ну или только с целью создания гибко настраиваемой системы, но думаю и в этом случае без нее можно обойтись
а) кто такое сказал?
b) живете старыми данными - рефлексия уже очень давно не тормоз.

если у тебя 300 методов и чтоб выбрать нужный - без рефлексии только case и if.
и как будет выглядеть портянка из 300 case или 300 if
вот где с производительность прощай...
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630753
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
нет. у меня уже есть то что должно быть. Писал его я. Просто переписываю под модульность.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630754
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopLeonid Kudryavtsev,
что скажете на счет моего варианта?

вариант, как вариант. Вы же сами сказали:

TsyklopМне не хочется набивать этот метод свичем который будет огромным для всех сообщений которые возможны.

или свитч, или если не хочется свитча, то HashMap. Простейший паттерн Command.

Chpasha пример реализации привел.

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

О чем тут дискутировать, я вообще не знаю ))). Конечно, полно обсуждений на 100500 страницах по "правильной реализации" даже таких паттернов как singleton и в принцеппе паттер command ничем не хуже )))... но это беспредметный "паттерно срачь" получится )))
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630755
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя....
если у тебя 300 методов и чтоб выбрать нужный - без рефлексии только case и if.
и как будет выглядеть портянка из 300 case или 300 if
вот где с производительность прощай...

HashMap чем не угодил ?
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630760
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Leonid Kudryavtsev,
можно подробнее про вариант с HashMap-ом?
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630761
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevHashMap чем не угодил ?у меня в HashMap и содержится список методов, этот список заполняется при запуске серверного приложения.
но как при помощи HashMap вызвать метод? и подставит ему данные?
с рефлексией просто.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630763
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopнет. у меня уже есть то что должно быть. Писал его я. Просто переписываю под модульность.у меня как раз и получается модульность.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630764
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
можно подробнее про вариант с HashMap-ом?
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630771
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopвадя,
можно подробнее про вариант с HashMap-ом?для каждой страницы есть свои методы обработки данных.
их число не ограничивается.
для каждой страницы эти методы находятся в отдельном файле/классе
эти файлы находятся в отдельной папке
при запуске приложения - эти файлы обрабатываются и в HashMap заносится имя метода и весь путь до него
при получении сообщения из HashMap по имени метода/"команды" извлекается полный путь до метода и через рефлексию вызывается этот метод.
загрузка в HashMap написана один раз и давно. класс с обработкой ws тоже давний.
если мне надо добавить обработку я просто в нужный файл/класс (относящийся к нужной странице) добавляю метод и всё.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630774
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevМинусы примера
это был пример решения задачи в общем виде, не применительно к сокетам, сервлетам, кол-ву запросов или чему либо еще. на счет как это называется, без разницы :)

Leonid Kudryavtsevпередавать обрабатываемые данные через параметры.
Лишняя операция создания объекта лично меня обычно напрягает
они и так будут через параметры передаваться. вопрос в том куда и как. на счет создания объектов - это все детали реализации. у нас вполне могут быть thread safe синглтоны (не в смысле статический класс, а в смысле один экземпляр)

Leonid Kudryavtsevмного букв, т.к. нужно для каждой операции создавать свой класс. Но тут вполне могут помочь лямбды и клосуры в новой Java. По смыслу будет тоже самое, но буковок в итоге может оказаться меньше и код получится более компактный.

Но компактность IMHO это плюс для случаев, когда операций мало. Если операций много, то лучше через классы, т.к. компактности в любом случае не получится, но с лямбдами можно сотворить помойку, а с классами хоть и будет много букв, зато строгая и логичная системаименно так - это тоже детали реализации - о конечно задаче ведомо только ТС. если у нас куча функций со своими зависимостями (репозитарии, сервисы) - то без классов никак, если у нас 4-5 команд, можно как угодно решать.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630776
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяты не понял проблемы
вопрос не в количестве обработчиков, а как их вызвать
ок, какая разница 300 методов или 300 условных строчек вида
type1 --> class1
это точно такой же табличный метод записи, только у тебя вместо Map - класс, вместо ключей - названия методов, а вместо значений - их тела
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630781
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaок, какая разница 300 методов или 300 условных строчек вида
type1 --> class1
это точно такой же табличный метод записи, только у тебя вместо Map - класс, вместо ключей - названия методов, а вместо значений - их тела
у тебя все в одном файле
у меня в разных файлах
я просто добавляю/удаляю/редактирую нужный метод,
мне его просто найти -есть страница с которой работаю - есть для неё файл/класс.
я работаю с одно страницей не мешаю никому работать с другой....
для выбора нужного ты перебираешь все до нужного, я вызываю нужный.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630783
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
у меня в файле/классе 20-30 методов
у тебя в одном все 300...
мне найти просто, тебе .....
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630791
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяу тебя все в одном файле
у меня в разных файлах
У меня конфигурация в одном месте, у тебя размазана тонким слоем повсюду. кроме того никто не мешает пойти дальше и разработать механизм само-регистрации обработчиков. все зависит от конкретной задачи - я не знаю, что делает ТС, я вижу только входящий метод и информацию о том, что там стопицот свитчей.

вадямне его просто найти -есть страница с которой работаю - есть для неё файл/класс
у меня нет никаких страниц, я описал способ централизованной обработки входящих сообщений

вадяя работаю с одно страницей не мешаю никому работать с другой.
что-что?

вадядля выбора нужного ты перебираешь все до нужного, я вызываю нужный
вадя, соберись. где у меня "перебираешь"?

вадяу меня в файле/классе 20-30 методов
что-то мало, у настоящих мастеров все вообще в одном классе
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630798
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaчто-то мало, у настоящих мастеров все вообще в одном классе300 методов в одном классе? ну уж нет....
chpashaвадяя работаю с одно страницей не мешаю никому работать с другой.
что-что?если я правлю одну страницу то я работаю с двумя файлами jsp странице и файлом с методами для этой страницы , мне никто не мешает и я никому не мешаю .
chpashaвадядля выбора нужного ты перебираешь все до нужного, я вызываю нужный
вадя, соберись. где у меня "перебираешь"?покажи как ты по имени метода вызываешь этот метод.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630800
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaвадямне его просто найти -есть страница с которой работаю - есть для неё файл/класс
у меня нет никаких страниц, я описал способ централизованной обработки входящих сообщенийу меня тоже централизованный метод, вот только сами методы разнесены для удобства по разным файлам
chpashaУ меня конфигурация в одном месте, у тебя размазана тонким слоем повсюду. кроме того никто не мешает пойти дальше и разработать механизм само-регистрации обработчиков. все зависит от конкретной задачи - я не знаю, что делает ТС, я вижу только входящий метод и информацию о том, что там стопицот свитчей.у меня не размазана - у меня есть четкое соответствие страницы браузера с методами , которые обрабатывают данные на этой странице
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630807
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя300 методов в одном классе? ну уж нет
это был сарказм. а 30 в самый раз да?

вадяесли я правлю одну страницу то я работаю с двумя файлами jsp странице и файлом
откуда у нас уже взялись какие-то jsp, где в топике про jsp? может у ТС messenger на сокетах? задача сформулирована довольно общим образом, особенно в разрезе применения внутреннего класса. Но отвечая на твой вопрос, у нас 16 апреля 2018, курс биткоина 8.087,46€ , merge уже изобрели.


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

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
//псевдокод для понимания идеи
Map<MgsType, Class<? extends MessageHandler> messageHandlerMap= {
   type1 --> MyMessageHandler1.class,
   ...
   type47 --> MyMessageHandler47.class
}

//здесь наш "перебор"
messageHandlerMap.get(type).newInstance()
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630817
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpasha,
допер Ваш вариант. Но есть вопрос. как мне в каждом обработчике получать доступ к списку подключенных к сокету юзверей? все они хранятся у меня в потоко безопасном листе CopyOnWriteArrayList<WsUser>. Делать этот лист публичным? или package private?
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630828
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaэто был сарказм. а 30 в самый раз да?это у меня 30+ для одной странице в одном файле.
в проекте 10++ страниц - так что 300 это реальная цифра без всякого сарказма.
chpashaоткуда у нас уже взялись какие-то jsp, где в топике про jsp? может у ТС messenger на сокетах?я к примеру привел на чем формируется страница. обновление данных по ws.
страниц на портале может быть много...
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630832
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopдопер Ваш вариант
можно на "ты", мы же на каком нибудь 4pda.ru ;)

Tsyklopкак мне в каждом обработчике получать доступ к списку подключенных к сокету юзверей? Делать этот лист публичным? или package private?имхо правильней выделить список пользователей в отдельный класс (да-да, еще один класс ;) ) . как до него достучаться в разных местах - возможны варианты. Можно его сделать статическим (если очень хочется) потокобезопасным. Можно его инжектировать там где надо с помощью di. Все зависит от конкретной ситуации и сферы применения.


P. S. тут я хочу немного отскочить в сторону: что ты конкретно реализуешь? что есть в наличии? di framework типа spring, или "все своё", как вадя любит? почему например не взять готовый framework для сокетов? тот же спринг. Я не специалист по сокетам, может еще десяток отличных framework-во существует.
Просто когда я смотрю, на то, что перетерли тут на двух страницах, а потом на примеры из спринга
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@Controller
public class GreetingController {


    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public Greeting greeting(HelloMessage message) throws Exception {        
        return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
    }

}


то у меня возникает закономерный вопрос набуя козе баян?

Имхо для того, чтобы самому городить вот это вот все - нужно иметь очень веский повод
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630834
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя к примеру привел на чем формируется страница. обновление данных по ws.
страниц на портале может быть много.
так и какой смысл в сравнении яблок со сливами? У тебя страницы какие-то, у ТС - не понятно что, у меня вообще абстрактный пример решения задачи в общем виде. Причем тут тогда кол-во методов и совместное редактирование одного файла в отрыве от задачи?
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630836
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha...Просто когда я смотрю, на то, что перетерли тут на двух страницах, а потом на примеры из спринга...

А можно просьбу от чайника и ламера:
когда ссылаетесь на спринг, давайте пожалуйста RTFM на книжку/доку.

AFAIK спринг он большой и если кто с ним не работал (например я), то примеры и анотации выдернутые из контекста - нифига не понятны (((
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630837
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,

это всё красиво пока в теории.
и в малом количестве
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630841
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяchpasha,

это всё красиво пока в теории.
и в малом количестве
Да нет у Chpasha никакой теории. Банальный паттерн command + паттерн factory. Что тут обсуждать, лично мне вообще не понятно.

Если у ТС есть вопросы по реализации, то просьба ТС их более явно сформулировать.

Я бы попытался привести пример кода, но у меня новый компьютер и инет за проксей. 180 Mb eclipse уже 3 часа скачаться не могут (((
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630842
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaтак и какой смысл в сравнении яблок со сливами? У тебя страницы какие-то, у ТС - не понятно что, у меня вообще абстрактный пример решения задачи в общем виде. Причем тут тогда кол-во методов и совместное редактирование одного файла в отрыве от задачи?ты читай всё - 21341559
у него 10 страниц...
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630852
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevкогда ссылаетесь на спринг, давайте пожалуйста RTFM на книжку/доку
дружище, spring + socket и первая же ссылка на пример, вторая на доку.

Leonid KudryavtsevAFAIK спринг он большой и если кто с ним не работал (например я), то примеры и анотации выдернутые из контекста - нифига не понятны (((ну извините. я (повторюсь), с сокетами в спринг тоже не работал, но мне взглянув на пример вполне понятно, что там происходит в общих чертах

Сообщение, отправленное по адресу "/hello" попадает в наш метод greeting - т.е. у нас уже из коробки роутинг (по сути предмет этого топика) и конвертация json -> dto. Далее мы возвращаем другой dto который в свою очередь снова превращается в json и улетает всем подписчикам

вадяэто всё красиво пока в теории.
и в малом количестведа-да, spring для hello world, твой велосипед для дела - строго в таком порядке
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630855
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяchpashaтак и какой смысл в сравнении яблок со сливами? У тебя страницы какие-то, у ТС - не понятно что, у меня вообще абстрактный пример решения задачи в общем виде. Причем тут тогда кол-во методов и совместное редактирование одного файла в отрыве от задачи?ты читай всё - 21341559
у него 10 страниц...

при чем тут страницы к вебсокету который сллужит сервером? подключатся я буду к этому серверу на каждой странице. На каждой будут свои сообщения. Но сервер должен обрабатывать их ВСЕ, ВСЕ, со всех страниц. Сервер он один для всех страниц.

Зачем приплетать другую тему сюда. не пойму.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630856
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяты читай всё - 21341559
у него 10 страниц...
мне больше заняться нечем. я ответил общим образом на общий вопрос
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630859
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaну извините. я (повторюсь), с сокетами в спринг тоже не работал, но мне взглянув на пример вполне понятно, что там происходит в общих чертахценное замечание, дальше можешь не продолжать
chpashaСообщение, отправленное по адресу "/hello" попадает в наш метод greetingещё более ценное высказывание...
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630860
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaмне больше заняться нечем. я ответил общим образом на общий вопрособщим образом..
куда уж далеее
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630861
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaLeonid Kudryavtsevкогда ссылаетесь на спринг, давайте пожалуйста RTFM на книжку/доку
дружище, spring + socket и первая же ссылка на пример, вторая на доку.

Leonid KudryavtsevAFAIK спринг он большой и если кто с ним не работал (например я), то примеры и анотации выдернутые из контекста - нифига не понятны (((ну извините. я (повторюсь), с сокетами в спринг тоже не работал, но мне взглянув на пример вполне понятно, что там происходит в общих чертах

Сообщение, отправленное по адресу "/hello" попадает в наш метод greeting - т.е. у нас уже из коробки роутинг (по сути предмет этого топика) и конвертация json -> dto. Далее мы возвращаем другой dto который в свою очередь снова превращается в json и улетает всем подписчикам

вадяэто всё красиво пока в теории.
и в малом количестведа-да, spring для hello world, твой велосипед для дела - строго в таком порядке

Нет. фреймворки я не использую (пока что). Использую либу для сокетов. Она весьма проста в использовании и не требует ничего сверхъестественного.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630862
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaдружище, spring + socket и первая же ссылка на пример, вторая на доку.
ну так я и говорю, хоть url кидайте. А то по анотациям из кода фиг поймешь, из какого места этот пример. По крайне мере, лично мне было не понятно (((
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630865
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяценное замечание, дальше можешь не продолжать
вадяещё более ценное высказывание..

тут ты меня уел

вадяобщим образом..
куда уж далеее
я должен был на общий вопрос без контекста написать 20 страниц говнокода? извините, учту на будущее
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630869
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopНет. фреймворки я не использую
зря, тебе сейчас кажется, что ты экономишь кучу времени, и все такое свое родное, понятное. Но однажды эта экономия вернется и ударит по башке. Ну если конечно ты не уволишься, тогда прилетит уже другому. Например когда уволится вадя, фирму просто закроют

Tsyklopне требует ничего сверхъестественного.
проекты имеют свойство разрастаться и усложняться
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630874
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaTsyklopНет. фреймворки я не использую
зря, тебе сейчас кажется, что ты экономишь кучу времени, и все такое свое родное, понятное. Но однажды эта экономия вернется и ударит по башке. Ну если конечно ты не уволишься, тогда прилетит уже другому. Например когда уволится вадя, фирму просто закроют

Tsyklopне требует ничего сверхъестественного.
проекты имеют свойство разрастаться и усложняться

я как бы не говорил что фреймворки это плохо и вроде как отметил что пока что не использую. Проект изначально был написан без них и переписывать все по фреймворк нет времени и средств.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630881
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopя как бы не говорил что фреймворки это плохо
а я не говорил, что ты говорил ;) - просто поделился соображениями. через это все проходят. ну почти, некоторые навсегда застряют на стадии велосипедов навсегда и я сейчас не только Вадю имею в виду, у самого таких полно любителей "своего".


TsyklopПроект изначально был написан без них и переписывать все по фреймворк нет времени и средствэто весомый аргумент (без сарказма)
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630882
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopИспользую либу для сокетов. Она весьма проста в использовании и не требует ничего сверхъестественного.можно взять либу у tomcat, всё просто и наглядно, куча доков, поддержка.
можно http://tootallnate.github.io/Java-WebSocket/ - работает на отдельном порту, что в некоторых случаях есть преимущество.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630885
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяTsyklopИспользую либу для сокетов. Она весьма проста в использовании и не требует ничего сверхъестественного.можно взять либу у tomcat, всё просто и наглядно, куча доков, поддержка.
можно http://tootallnate.github.io/Java-WebSocket/ - работает на отдельном порту, что в некоторых случаях есть преимущество.

Чет примеров я не нашел.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630891
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopЧет примеров я не нашел.там есть кнопка View On GitHub
работает и в анроиде
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630903
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяTsyklopЧет примеров я не нашел.там есть кнопка View On GitHub
работает и в анроиде

честно.. не очень либа. в той что использую я все уже готово и не надо так заморачиваться. При том что я веб сокет юзаю на java ee приложении, а те примеры сделаны на простом приложении.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630921
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopвадяпропущено...
там есть кнопка View On GitHub
работает и в анроиде

честно.. не очень либа. в той что использую я все уже готово и не надо так заморачиваться. При том что я веб сокет юзаю на java ee приложении, а те примеры сделаны на простом приложении.
там либа, можно пользовать где угодно. там заморачиваться тоже не надо. запустить сервер, и обработчик.
можешь взять из tomcat там ещё проще
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630931
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадятам либа, можно пользовать где угодно. там заморачиваться тоже не надо. запустить сервер, и обработчик.
можешь взять из tomcat там ещё проще

в той что я использую даже сервер запускать не надо, его даже писать не надо. Создать класс, добавить аннотацию @SeverEndpoint, прописать все On типы, так же аннотациями и радоваться.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630934
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,
в общем, какую либу использовать - дело вкуса.
я работал и кошачьей и с http://tootallnate.github.io/Java-WebSocket/
большой разницы не увидел.
главное организовать формат передаваемых данных, чтоб удобно было .
я выбрал команда+разделитель+данные.
таким образом я могу обеспечить передачу между сервером и клиентом как для текстовых данных, так и для бинарных.
данные могут представлять из себя как json, так и любую строку, в том числе и html строка, что позволяет делать "серверный рендеринг"
и обеспечить простую вставку в дом буквально одной строкой.
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630937
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklopв той что я использую даже сервер запускать не надо, его даже писать не надо. Создать класс, добавить аннотацию @SeverEndpoint, прописать все On типы, так же аннотациями и радоваться.запускать сервер - образное выражение - просто ставится слушатель порта. что есть тоже самое сто и @SeverEndpoint. по сути.

в либе tomcat
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
@ServerEndpoint(value = "/WS_server", configurator = WsServerConfigurator.class)
public class WS_server {

    public static Set<Session> ListWsSocet = Collections.synchronizedSet(new HashSet<Session>());


 @OnOpen
    public void OnOpen(EndpointConfig endpointConfig, Session userSession) {
 ......
}



  @OnMessage
    public void OnMessage(String data, Session userSession) {
.......
}

 @OnMessage
    public void onBinaryMessage(ByteBuffer message, Session userSession) {
.......
}
...............
...
Рейтинг: 0 / 0
Внутренний не статический класс. Верный подход? WebSocket
    #39630940
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяя выбрал команда+разделитель+данные.такое позволяет передавать данные и выбирать тот метод, который обрабатывает эти данные. это на серверной стороне, на клиентской - функция , которая обрабатывает данные.
...
Рейтинг: 0 / 0
61 сообщений из 61, показаны все 3 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Внутренний не статический класс. Верный подход? WebSocket
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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