Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя, просто пример из туториала.
Figure - что-то типа обертки над json, а в @ServerEndpoint указываем классы encoders = {FigureEncoder.class}, decoders = {FigureDecoder.class}
Figure:
+
package com.test.whiteboardapp;

import java.io.StringWriter;
import javax.json.Json;
import javax.json.JsonObject;

public class Figure {
    private JsonObject json;

    public Figure(JsonObject json) {
        this.json = json;
    }

    public JsonObject getJson() {
        return json;
    }

    public void setJson(JsonObject json) {
        this.json = json;
    }

    @Override
    public String toString() {
        StringWriter writer = new StringWriter();
        Json.createWriter(writer).write(json);
        return writer.toString();
    }
}

FigureEncoder:
+
package com.test.whiteboardapp;

import javax.websocket.EncodeException;
import javax.websocket.Encoder;
import javax.websocket.EndpointConfig;

public class FigureEncoder implements Encoder.Text<Figure>{
    @Override
    public String encode(Figure figure) throws EncodeException {
        return figure.getJson().toString();
    }

    @Override
    public void init(EndpointConfig ec) {
        System.out.println("init");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}

FigureDecoder:
+
package com.test.whiteboardapp;

import java.io.StringReader;
import javax.json.Json;
import javax.json.JsonException;
import javax.json.JsonObject;
import javax.websocket.DecodeException;
import javax.websocket.Decoder;
import javax.websocket.EndpointConfig;

public class FigureDecoder implements Decoder.Text<Figure> {
    @Override
    public Figure decode(String string) throws DecodeException {
        JsonObject jsonObject = Json.createReader(new StringReader(string)).readObject();
        return  new Figure(jsonObject);
    }

    @Override
    public boolean willDecode(String string) {
        try {
            Json.createReader(new StringReader(string)).readObject();
            return true;
        } catch (JsonException ex) {
            ex.printStackTrace();
            return false;
        }
    
    }

    @Override
    public void init(EndpointConfig ec) {
        System.out.println("init");
    }

    @Override
    public void destroy() {
        System.out.println("destroy");
    }
}


Сообщение было отредактировано: 18 мар 20, 18:47
18 мар 20, 18:47    [22101701]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
это что за боязнь?

Скорее, желание сделать оптимальнее.
Приложение само шуршит с данными и от того, что юзеры будут постоянно дергать его, залезая в БД, быстрее оно не выполнит.
Все-таки буферизация где она уместна - это вполне нормально по-моему.
18 мар 20, 18:53    [22101713]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
вадя
счас у тебя получается Что сообщение от каждого рассылается каждому
а кроме как простой рассылки?
18 мар 20, 18:54    [22101715]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Скорее, желание сделать оптимальнее.
Приложение само шуршит с данными и от того, что юзеры будут постоянно дергать его, залезая в БД, быстрее оно не выполнит.
Все-таки буферизация где она уместна - это вполне нормально по-моему.
ну если только по конкретному случаю
18 мар 20, 18:55    [22101719]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
вадя
счас у тебя получается Что сообщение от каждого рассылается каждому
а кроме как простой рассылки?

Не понимаю вопрос.
Как и куда копать в поиске ответа на топик.
19 мар 20, 00:40    [22101858]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
если число подключений ограничено, какая стратегия работы с websocket?
для какой задачи?
19 мар 20, 07:26    [22101890]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Не понимаю вопрос.
в твоём примере 22101646 показана только рассылка входного сообщения от одного клиента всем остальным.
а как у тебя организованы другие действия? выполнить обработку полученного сообщения ? и прочее.
JDS
Как и куда копать в поиске ответа на топик.
а что значит "Раздушить по количеству ..."
ты хочешь от одного клиента иметь кучу коннектов?
19 мар 20, 07:27    [22101891]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
в твоём примере показана только рассылка входного сообщения от одного клиента всем остальным.
а как у тебя организованы другие действия? выполнить обработку полученного сообщения? и прочее.

Есть конечно и запросы с персональными ответами и для них меня вполне устроил бы http, но вопрос возникает при массовом обновлении данных на клиентах: зачем постоянно долбить сервер кучей запросов, проверяя не появились ли новые данные.
вадя
а что значит "Раздушить по количеству ...", ты хочешь от одного клиента иметь кучу коннектов?

Нет. Коннекты один к одному.
Basil A. Sidorov
Сокет это две пары: src-ip:src-port и dst-ip:dst-port.
Для HTTP и многих других протоколов пара dst-ip:dst-port фиксирована.
Дальше включаем банальную логику и получаем тривиальный вывод: даже когда провайдер спрятал за NAT на одном (единственном) IP-адресе ~16К клиентов, "немного" это "более чем достаточно". Почему 16К? Потому, что есть рекомендации по распределению портов по диапазонам.
В любом случае вам, как владельцу сервиса, должно быть покласть на проблемы клиентов за конкретным провайдером. В данном конкретном случае - совершенно объективно.

Возможно, я не понимаю, что мне пытались сказать уже несколько раз
Я видимо неверно понял, что на сервере в целом ограниченное число портов с потолком 65К?
Правильно ли, что сервер без всяких плясок может принять условно 16К подключений с одного IP, 16К с другого, с третьего и так далее?
Если да, тогда вопрос действительно в ресурсах.
Но и горизонтальное масштабирование все равно актуально, т.к. не можем бесконечно увеличивать память.
И тогда если говорить про горизонтальное масштабирование, то приложение видимо, должно быть построено для работы в кластере.
То есть нужен балансировщик (какой и как он работает в контексте WS пока не представляю, то есть как он будет/должен раскладывать запросы/ответы по сети между узлами). Возникает вопрос и с синхронизацией узлов или должна быть некая центральная нода где лежат общие данные (тот же общий буфер например), то есть узлы главным образом для поддержки бОльшего количества подключений, с вычислениями легко справится и одна машина.

Сообщение было отредактировано: 19 мар 20, 09:07
19 мар 20, 09:07    [22101906]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
вадя
Member

Откуда: Екатеринбург
Сообщений: 17568
JDS
Есть конечно и запросы с персональными ответами и для них меня вполне устроил бы http, но вопрос возникает при массовом обновлении данных на клиентах: зачем постоянно долбить сервер кучей запросов, проверяя не появились ли новые данные.
и опять - для чего тебе ws?
JDS
Раздушить
это что означает?
19 мар 20, 09:29    [22101912]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
зачем постоянно долбить сервер кучей запросов, проверяя не появились ли новые данные.
у тебя скоро рекорд.
Будет три страницы, но непонятно, что за куча запросов и зачем клиенту долбить 5 раз в сек сервер?
19 мар 20, 09:35    [22101913]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
Мне тоже до сих пор непонятна ни архитектура ни нагрузка.
Что вообще обсуждается? Какой сценарий?
19 мар 20, 11:01    [22101961]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
вадя
и опять - для чего тебе ws?

Чтобы обновлять данные странице клиента не по запросу пользователя и не периодическими http-запросами в фоне.
вадя
Раздушить это что означает?

Потому что почти на всех уровнях упираешься в ограничения (у браузера, возможно, на веб-сервере, операционка, сам протокол, количество памяти). А например, условный ориентир держать 1-2млн коннектов.
PetroNotC Sharp
непонятно, что за куча запросов и зачем клиенту долбить 5 раз в сек сервер?

В том и дело, что не охота долбить )
Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?

Сообщение было отредактировано: 19 мар 20, 11:05
19 мар 20, 11:05    [22101967]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Lelouch
Member

Откуда: Москва
Сообщений: 1802
JDS

Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?


Если именно с сервера на клиент - https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events
19 мар 20, 11:15    [22101975]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
В том и дело, что не охота долбить )
Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?
есть.
Только когда юз кейс использования дождемся?
Тупишь?
19 мар 20, 11:15    [22101976]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
Захотелось программисту, написал кучу кода.
А сам ни бе ни ме ни кукареку. Внятно объяснить зачем написал, не может.
19 мар 20, 11:19    [22101977]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
Мне кажется - это как диалог двух блондинок. Он ведётся на тонком уровне.
Не только на словах. А на уровне жестов. Мимики и недвусмысленных намёков.

Вобщем я сейчас себя ощутил тупым сексистским мужланом который не может
понять диалог жены и подруги по телефону.
19 мар 20, 11:24    [22101983]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10009
JDS
Правильно ли, что сервер без всяких плясок может принять условно 16К подключений с одного IP, 16К с другого, с третьего и так далее?
Опять мимо. Сервер может принять столько подключений, насколько у сервера хватит ресурсов. Как эти подключения распределяются по IP-адресам и прочему - вас не колышет и колыхать не должно.
19 мар 20, 11:38    [22102001]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
Lelouch
JDS

Может есть какая-то другая технология кроме WS отправки данных на клиент по мере готовности на сервере?


Если именно с сервера на клиент - https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events

Посмотрел https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events.
Ну это php и там так же используется коннект, то есть возможно семантика не веб-сокеты, но внутри так понимаю, все равно сокеты? )

PetroNotC Sharp
Только когда юз кейс использования дождемся?

Аналогично. В который раз озвучиваю )
Есть допустим 100тыс. клиентов.
Им надо обновлять данные на странице.
Если каждый из них будет слать раз в секунду http-запрос, считаю это не очень нормальным.
Поэтому смотрю в сторону WS, но там упираемся в лимиты по количеству коннектов.
Какие точно и на каких уровнях, не знаю. Изначально столкнулся вот с ограничениями в браузере, но это пока ладно.
Что не понятного в том, что изложил? )
19 мар 20, 11:45    [22102021]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
JDS

Если каждый из них будет слать раз в секунду http-запрос, считаю это не очень нормальным.

Я тоже считаю это не очень нормальным.

Поэтому смотрю в сторону WS, но там упираемся в лимиты по количеству коннектов.
Какие точно и на каких уровнях, не знаю. Изначально столкнулся вот с ограничениями в браузере, но это пока ладно.
Что не понятного в том, что изложил? )

Вывод не верный.

Каким образом твои рассуждения довели тебя до WS - непонятно. Ограничения в браузере - забей.
Никто в браузере так не работает как ты изобразил. Бери среднего пользователя а не маргинала
и не тестовый стенд по нагрузке.
19 мар 20, 11:52    [22102030]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
Что не понятного в том, что изложил? )

1. Какого рода у них программа на экране?
2. 100000 клиентов придумал? Что было до этого?
19 мар 20, 11:58    [22102038]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
mayton
Ограничения в браузере - забей. Никто в браузере так не работает как ты изобразил. Бери среднего пользователя а не маргинала и не тестовый стенд по нагрузке.

Это понятно, что никто так не работает и на браузер забил. Но что возможными с лимитами на других уровнях у меня представления нет.
19 мар 20, 12:00    [22102045]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
JDS
Member

Откуда:
Сообщений: 687
PetroNotC Sharp
1. Какого рода у них программа на экране?
2. 100000 клиентов придумал? Что было до этого?

Эммм ) 1. Браузер. 2. Гипотетически.

Сообщение было отредактировано: 19 мар 20, 12:00
19 мар 20, 12:01    [22102047]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS
PetroNotC Sharp
пропущено...

1. Какого рода у них программа на экране?
2. 100000 клиентов придумал? Что было до этого?

Эммм ) 1. Браузер. 2. Гипотетически.
все ясно.
Вопросы архитектуры не решаются гипотетически.
Так как:
"Один дурак может задать столько вопросов что и 100 мудрецов не ответят" [(с) В.И. Ленин ПСС том 8 стр.15, работа "Как нам преобразовать РабКрин"]
Удачи!
19 мар 20, 12:03    [22102048]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 4508
JDS,
Аксиома:
В форуме легче помогают, если у ТС реальная проблема.
19 мар 20, 12:07    [22102051]     Ответить | Цитировать Сообщить модератору
 Re: Раздушить по количеству WebSocket подключений  [new]
mayton
Member

Откуда: loopback
Сообщений: 45514
JDS
mayton
Ограничения в браузере - забей. Никто в браузере так не работает как ты изобразил. Бери среднего пользователя а не маргинала и не тестовый стенд по нагрузке.

Это понятно, что никто так не работает и на браузер забил. Но что возможными с лимитами на других уровнях у меня представления нет.

Смотри. Мы здесь можем еще 100 страниц флуда написать. Но ты должен нас нагнуть (!) реальным примером.
С исходниками клиента и сервера. И с моделированием нагрузки.

Архитектуры разрабатываются итеративно. Тоесть по принципу многоходовочки. Сделал. Проверил на перформанс.
Увидел. Проанализировал. Пофиксил. И снова по кругу. И ни один "диванный эксперт и оналитик" тебе здесь за
одну итерацию никакого решения не выдаст. Решение - это даже не 1-2 варианта. Это - дерево развития. Где
в каждом узле - 100500 направлений куда двигаться.

Улавливаешь?
19 мар 20, 12:14    [22102060]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Java Ответить