Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ускорение времени ответа системы на запросы пользователя #24

Open
idzm opened this issue Jul 27, 2018 · 15 comments

Comments

@idzm
Copy link
Member

idzm commented Jul 27, 2018

По результатам демонстрации работы системы (база знаний по S88), оказалось, что текущее время отклика системы, развернутое на тестовом общедоступном сервере, велико - у пользователя уже появился следующий запрос, а текущий ответ ещё не до конца отобразился. @deniskoronchik упоминал о варианте оптимизации сетевого обмена - необходимость такой модернизации получила реальное подтверждение.

@deniskoronchik
Copy link
Contributor

deniskoronchik commented Jul 27, 2018

Код есть в master sc-machine правда пока там сервер на питоне однопоточный (много клиентов не поддержит). Код работы со стороны JavaScript тут https://github.com/ostis-dev/sc-core его же можно поставить через npm: npm install --save @ostis/sc-core

Описание протокола:
http://ostis-dev.github.io/sc-machine/http/websocket/

Все проверено и работает

@idzm
Copy link
Member Author

idzm commented Jul 27, 2018

Чтобы собрать и запустить данную версию что нужно?

@deniskoronchik
Copy link
Contributor

Версии нет такой же жду веб, есть возможность существующую перевести на этот протокол. Его поддержка есть по умолчанию в sc-machine

@idzm
Copy link
Member Author

idzm commented Nov 27, 2018

Исходя из описания репозиториев, где будет располагаться решение данного вопроса?

@deniskoronchik
Copy link
Contributor

deniskoronchik commented Nov 27, 2018

https://github.com/ostis-dev/sc-machine решение не предназначено для тысяч пользователей, для этого надо решение доделывать. Но для пары сотен оно будет куда быстрее.

Реализация протокола уже есть в проекте https://github.com/ostis-dev/sc-core его можно поставить из пакета nom install --save @ostis/sc-core. За протокол отвечает класс ScNet.
Там же есть такие же типы данных как ScAddr, ScType аналогичные C++, только для JS.
Также класс ScSet https://github.com/ostis-dev/sc-core/blob/master/src/sc_set.ts позволяющий удобно работать со множествами:

this._deviceClassSet = new ScSet(
            this._client,
            this._keynodes.kDevice,
            this.OnInitializeDeviceClassSet.bind(this),
            this.OnAddDeviceClass.bind(this),
            this.OnRemoveDeviceClass.bind(this));
...
  private async OnInitializeDeviceClassSet(devices: ScAddr[]) : Promise<void> {
        
        for (let i = 0; i < devices.length; ++i) {
            const addr: ScAddr = devices[i];
            await this.OnAddDeviceClass(addr);
        }

        return new Promise<void>(function(resolve) {
            resolve();
        });
    }

    private async OnAddDeviceClass(addr: ScAddr) : Promise<void> {
        const name: string = await this.GetMainIdtf(addr);
        let image: ScAddr = await this.GetImage(addr);

        if (!image.isValid()) {
            image = await this.GetImage(this._keynodes.kDevice);
        }

        this._store.dispatch(store.actions.device.addDeviceClass({
            addr: addr,
            devices: store.NewDeviceMap(),
            name: name,
            image: image
        }));

        await this.ListDevicesInClass(addr);

        return new Promise<void>(function(resolve) {
            resolve();
        });
    }

    private async OnRemoveDeviceClass(addr: ScAddr) : Promise<void> {
        this._store.dispatch(store.actions.device.removeDeviceClass(addr));

        return new Promise<void>(function(resolve) {
            resolve();
        });
    }

Пример использования:

@ShunkevichDV
Copy link
Collaborator

Правильно ли я понимаю, что ускорение происходит за счет того, что поиск делается одним запросом по шаблону, а не поэлементно как в чистом SCTP?

@deniskoronchik
Copy link
Contributor

deniskoronchik commented Nov 27, 2018

@ShunkevichDV
Не только поиск по шаблону, все операции группируются:

За один запрос мы можем как получить содержимое ссылок, так и установить. При этом часть может получаться, другая устанавливаться. И также с созданием конструкций

http://ostis-dev.github.io/sc-machine/http/websocket/#createelements

@deniskoronchik
Copy link
Contributor

deniskoronchik commented Nov 27, 2018

Кроме того шаблоны в новой версии будут поддерживать опциональные конструкции. Если топишь тройка помеченная флагом, может отсутствовать в результате. Можно за один запрос получить например все виды идентификаторов, и если отношение например к системному в шаблоне указано как опционально, то его отсутсвие у элемента по прежнему вернет результат в поиске. Просто эти поля будут с пустыми адресами.

Вот примеры в юнит тестах (для понимания семантики): https://github.com/deniskoronchik/sc-machine/blob/dev/sc-memory/test/wrap/units/test_templates.cpp#L1542-L1710

Тоже самое есть и в ScNet для JS. Но работает пока лишь с версией: https://github.com/deniskoronchik/sc-machine/tree/dev

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

@idzm
Copy link
Member Author

idzm commented May 29, 2019

День добрый. @deniskoronchik, @ShunkevichDV - какая новая информация по данному вопросу? Как я помню, часть уже внедрена?

@ShunkevichDV
Copy link
Collaborator

Были некоторые проблемы со сборкой под системы на базе Ubuntu 18.04, Денис исправляет и мы будем пробовать внедрять новый протокол в интерфейсную часть, я другим ребятам уже частично показал

@idzm
Copy link
Member Author

idzm commented Feb 20, 2021

День добрый. @deniskoronchik, @ShunkevichDV - есть новая информация по данному вопросу? С учетом последних доработок этот вопрос уже решён?

@ShunkevichDV
Copy link
Collaborator

@idzm частично решен, но требуется переработка интерфейса, она в процессе, но пока еще далека от завершения. Тогда и скорость, и возможности значительно обновятся

@idzm
Copy link
Member Author

idzm commented Oct 27, 2022

@ShunkevichDV - я так понимаю учетом последних доработок этот вопрос уже решён?

@ShunkevichDV
Copy link
Collaborator

В какой-то мере да, стало значительно быстрее. Можно дождаться обновлений на сервере и тогда закрыть

@MikhailSadovsky
Copy link

После установки версии https://github.com/ostis-ai/ostis-web-platform/releases/tag/0.7.0-Rebirth проблема должна уйти

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants