Ответы пользователя по тегу Компьютерные сети
  • Как открывать много TCP соединений и поддерживать их?

    bingo347
    @bingo347
    Crazy on performance...
    Как уже написали в соседнем ответе, лимит портов 65535 на 1 интерфейс.
    Но это на один интерфейс, самое простое решение тут воткнуть несколько сетевых карт, да у них будут разные ip (по сути у одной машины будет пул ip), но для 100к коннектов хватит 2 карточек.
    В Linux (насчет других ОС не уверен, но возможно тоже) есть способы поизвращаться и поднять 2+ виртуальных интерфейса на одной сетевой карте. При этом у машины так же будет 2 ip адреса и нужно будет распределять соединения между ними.

    Хотя по хорошему я бы посмотрел здесь в сторону UDP с одним занятым портом на машине, а необходимые возможности TCP уже воспроизводить программно.
    Ответ написан
    5 комментариев
  • Какой роутер нынче хорош дома для гика?

    bingo347
    @bingo347
    Crazy on performance...
    Поделюсь своим гиковским вариантом:
    Железо:
    Мать: ASUS H110M-K
    Проц: Intel Pentium G4560
    Память: Kingston HyperX FURY, DDR4, 2 по 4ГБ, разгон до 2.4ГГц
    SSD: AMD Radeon R3 Series на 60ГБ
    HDD: WD Black на 2ТБ (файлсервер/бэкапы)
    Доп сетевуха: TP-LINK TG-3468 (для локалки)
    WiFi сетевуха: TP-LINK TL-WDN4800 - антены раскиданы по квартире удлинителями
    Софт:
    ОС: Debian 9 (Linux 4.9)
    hostapd - делаем из WiFi сетевухи точку доступа
    dnsmasq - dhcp server + dns cache
    iptables - nat + firewall
    openVPN - в качестве сервака для удаленного доступа в домашнюю сеть
    ручная настройка интерфейсов (/etc/network/interfaces), bridge между локалкой, WiFi и VPN
    5af21e07203ff715392288.jpeg5af21e225d137262866893.jpeg
    для роутера этого достаточно, но я на этом не остановился...
    купил белый ip у провайдера
    nginx - торчит наружу портами 443 и 80 и в локалку - 80
    node.js - личный сайтик + автоматизация (те же бэкапы)
    gitea - личный git
    verdaccio - личный npm
    самописная приблуда на go - сервак для STM32 контроллеров (Умный дом)
    Samba - файлопомойка
    Transmission - торентокачалка (рулится из node.js через cli интерфейс)
    пока на этом остановился
    Ответ написан
  • Как называется формат маской "225.255.255.0" и "/24"? И как перевести "225.255.255.0" в "/24"?

    bingo347
    @bingo347
    Crazy on performance...
    225.255.255.0 - переводим в двоичную СС -> 11111111.11111111.11111111.00000000 - 24 единицы, поэтому /24 в краткой записи, так как маска всегда имеет вид сначала подряд единицы, в конце - подряд нули
    Ответ написан
    4 комментария
  • Как работают WebSockets?

    bingo347
    @bingo347
    Crazy on performance...
    WebSocket - постоянное соединение поверх http(s)
    При установлении соединения происходит рукопожатие с помощью специальных http заголовков, после любая сторона в любой момент времени (пока соединение не прервется) может писать в тело запроса сообщения. Каждое такое сообщение представляет из себя передаваемые данные + мета-данные

    1. Можно найти сходство с tcp, только вместо пакета у нас сообщение. Так как ws работают поверх http, который в свою очередь работает поверх tcp, то формально одно сообщение может быть разбито на несколько tcp пакетов, а в одном пакете может содержаться несколько сообщений, однако единицей данных для ws является именно сообщение
    2. ws - это постоянное соединение, которое будет висеть пока любая из сторон не закроет его либо пока не оборвется связь. Так как сокет формально может простаивать (когда нет обмена данными), то tcp соединение для него нужно открывать с опцией keep-alive, а так же желательно отправлять http заголовки для keep-alive в рукопожатии.
    3. Любая сторона может в любой момент времени может отправить любое количество сообщений. Получающая сторона получит данные, когда до нее дойдут все tcp пакеты самого раннего из сообщений (это гарантирует, что сообщения придут в том же порядке, в котором они были отправлены)
    Ответ написан
    6 комментариев
  • NodeJS как получить размер файла в POST запросе?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Content-length в заголовках запроса должен соответствовать размеру всего тела запроса, что Вы и имеете, по нему можно заранее предсказать размер загружаемых данных, но полагаться на него нельзя, хотя браузеры отправляют его корректно, как правило
    В multipart/form-data теле так же присутствуют дополнительные заголовки для каждого поля, как минимум заголовок с именем поля, но для файлов могут присутствовать свои Content-type и Content-length
    Хотя и они не обязательны
    Если цель - ограничить максимальный размер файла, можно их проверять и если есть и превышают лимит - обрывать запрос сразу
    В любом случае измеряем размер во время загрузки, если превысил лимит - обрываем запрос
    Ответ написан
    Комментировать
  • Какие сетевые протоколы лучше использовать мобильной онлайн игре?

    bingo347
    @bingo347
    Crazy on performance...
    UPD прекрасно подходит для обмена данными в реальном времени, где потеря данных не критична
    Например в играх это передвижение игроков по карте
    Подразумевается, что клиент сможет восстановить утерянные данные по следующим пакетам, например сгладить движение
    В Вашем случае TCP будет предпочтительнее (имхо)

    По второй части, один постоянный коннект создаст меньше нагрузки на сервер чем множество коротких
    Ответ написан
    1 комментарий
  • Как отправить команду без перезагрузки страницы?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Читаем про ajaxи про cors
    Если удаленный сервер не отдает cors заголовков и повлиять на это никак нельзя, то читаем про jsonp и imagep
    Ответ написан
    Комментировать
  • С чего начать создание своего онлайн графического редактора?

    bingo347
    @bingo347
    Crazy on performance...
    CanvasApi (2d)
    для построения аля-paint вполне достаточно
    Ответ написан
    Комментировать
  • Почему незащищенное соединение на андроиде?

    bingo347
    @bingo347
    Crazy on performance...
    Проверьте свой домен здесь https://www.ssllabs.com/ssltest/analyze.html
    Вам подробно распишут информацию о Вашем сертификате и о вышестоящих, а так же укажут имеющиеся проблемы.

    Наиболее вероятная проблема в том, что мобильные браузеры не имеют вышестоящий сертификат в своем хранилище доверенных сертификатов, в этом случае настройте свой сервер так, чтоб он выдавал и Ваш сертификат и вышестоящий
    Ответ написан
    Комментировать
  • Что такое net socket?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    в node.js модуль net реализует протоколы tcp, upd и unixsock
    именно этот модуль позволяет ноде создавать различные сервера, а так же подключаться к другим серверам
    модуль http например написан как обертка над модулем net реализующая протокол http (который работает поверх tcp)
    Сам же класс сокета наследуется от stream.Duplex
    Ответ написан
    Комментировать
  • Как индексируется в поисковиках one page app сайты?

    bingo347
    @bingo347
    Crazy on performance...
    Дополню ответ выше пояснениями и примерами
    Сервер для любой страницы должен уметь присылать ответ как в виде готовой html так и в виде данных для генерации данного html на клиенте, соответственно понадобится шаблонизатор способный работать как на клиенте, так и на сервере.
    Такой сайт спокойно смогут просматривать поисковики, а так же браузеры с отключенным javascript, а когда все норм (js работает) мы получили готовую страницу при первом запросе, а дальше работаем по принципу SPA для последующих переходов между страницами.
    Второй важный момент, поисковики ищут внутренние страницы сайта переходя по ссылкам <a href="/page2">Page 2</a>. Соответственно наше SPA должен запускать свой роутинг перехватывая клики по ссылкам и основываясь на атрибуте href кликнутой ссылки
    Третий момент, придется позаботится о historyAPI для удобства пользователя.

    Ну и на последок, как я это все реализовал у себя на сайте
    У меня есть пачка шаблонов описывающих содержимое страниц, они работают как на сервере так и на клиенте
    Есть один базовый шаблон, задающий структуру html документа, он работает только на сервере.
    По запросу определенной страницы, сервер собирает из шаблонов полноценный html и отдает его браузеру, вот так: https://d-belyaev.ru/
    Браузер ищет все теги a на странице и вешает на них обработчик click:
    function render(node) {
        var links = node.getElementsByTagName('a');
        for(let i = links.length; i--;) {
            links[i].addEventListener('click', doLinkClick);
        }
    }
    
    function doLinkClick(event) {
        var href = event.target.getAttribute('href');
        if(!href.startsWith('/')) return true;
        event.preventDefault();
        router(href);
    }

    Роутер по данному href отправляет ajax запрос на сервер, дописывая к нему ?json
    На что сервер уже отвечает по другому: https://d-belyaev.ru/?json
    А реализовано это все вот таким роутом на сервере:
    function indexRoute(request) {
        var pageData = {
            template : 'page-index',
            activeMenuIndex : 0
        };
        if(request.url.query === 'json') {
            request.json(pageData);
        } else {
            request.html(baseTemplate(pageData));
        }
    }

    Правда в нем у меня пока не хватает обработки для 304 статуса (страница в кэше браузера), так как руки пока не дошли
    Ответ написан
    6 комментариев
  • Есть ли скрипт который даст смотреть HLS видео в стандартных плеерах браузеров?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ответ написан
    Комментировать