Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2 3 4      [все]
 Отправить задание c++ серверу  [new]
ro25man
Member

Откуда:
Сообщений: 3
Здравствуйте
Решил поизучать серверные приложений на c++ и написать простенький сервер, выполняющий запросы клиента. Есть клиент, с которого я отправляю запрос, чтобы выполнить какую-либо операцию на сервере. Пусть это будет функция, возвращающая текущее время getTime(). Как заставить сервер выполнить эту функцию?
Единственное предположение - это передавать какой-то признак (текст, число), который будет привязан к функции getTime(). На сервере добавить переменную и выполнять её обработку через if или switch. Это выглядит примерно так:
if (param == "getTime")
getTime();
и т.д. для каждой функции сервера. То есть если на сервере будет 1000 таких функций, то для каждой из них мне нужно будет делать ветку else if? Аналогично при использовании оператора switch.
Есть другие способы для выполнения таких запросов или это единственный?
28 дек 20, 22:00    [22256037]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ro25man
Есть другие способы для выполнения таких запросов или это единственный?

Единственный.

Posted via ActualForum NNTP Server 1.5

28 дек 20, 23:16    [22256065]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
В вопросе есть два вопроса.

Первое - это протокол. Как передать по сети. Да хоть так.

wget http://ro25man.com/server?argument=getTime


Второе - это реализация. Можно switch. Можно if. Можно еще много чего придумать
но ты начни хотя-бы с клиент-сервера на сокетах.
28 дек 20, 23:54    [22256083]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1950
ro25man
Есть другие способы для выполнения таких запросов или это единственный?

От используемых технологий зависит.
Например, реализуя сервер как Web сервис/службу, ты напрямую создаешь на сервере реализацию нужных методов. А клиент обращается прямо к нужному методу. Далее волшебным образом запрос клиента преобразуется в запрос низкого уровня, поток данных передается на сервер, где-то невидимо от тебя выполняется цепочка else-if, и вызывается нужны тебе метод, результат возвращается клиенту. Подобных технологий и библиотек - масса.
30 дек 20, 00:59    [22256863]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
tip78
Member

Откуда: Москва
Сообщений: 1266
гугли "c++ client-server"
mayton
Да хоть так.

wget http://ro25man.com/server?argument=getTime

это целый HTTP-сервер нужен )
а у него просто сокеты

Сообщение было отредактировано: 30 дек 20, 09:45
30 дек 20, 09:50    [22256901]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34688
ro25man

Единственное предположение - это передавать какой-то признак (текст, число), который будет привязан к функции getTime(). На сервере добавить переменную и выполнять её обработку через if или switch. Это выглядит примерно так:
if (param == "getTime")
getTime();
и т.д. для каждой функции сервера. То есть если на сервере будет 1000 таких функций, то для каждой из них мне нужно будет делать ветку else if? Аналогично при использовании оператора switch.
Есть другие способы для выполнения таких запросов или это единственный?


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

При этом конечно IF/SWITCH там в коде в явном виде может и не быть, но суть действий всё равно такая: по какому-то типу запроса будут вызываться на выполнение какие-то действия. И от этого IF/SWITCH конечно же никуда не уйти.
30 дек 20, 09:58    [22256908]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
tip78
гугли "c++ client-server"
mayton
Да хоть так.

wget http://ro25man.com/server?argument=getTime

это целый HTTP-сервер нужен )
а у него просто сокеты

А расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть насколько она велика.

И как вообще можно построить протокол на сокетах?
30 дек 20, 10:55    [22256943]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
MasterZiv,
+1
Слово просто "сервер" не существует. Без указания протокола/архитектуры.
Есть сокет сервер, веб сервер, аппСервер, фтпСервер.....
30 дек 20, 11:16    [22256962]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

mayton
А расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть
насколько она велика.

Размером в сумму всех RFC, расписывающих HTTP заголовки и соответствющие им форматы
данных. Несколько мегабайт нужного чтения наберётся.

Posted via ActualForum NNTP Server 1.5

30 дек 20, 13:12    [22257110]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
Dimitry Sibiryakov

mayton
А расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть
насколько она велика.

Размером в сумму всех RFC, расписывающих HTTP заголовки и соответствющие им форматы
данных. Несколько мегабайт нужного чтения наберётся.

Автор - пытается построить свой протокол. Я предполагаю что поверх сокетов. Хотел предложить ему
сначала telnet как клиента. И спецификацию команд наподобие упрощенного http. Типа POST/GET.
30 дек 20, 13:35    [22257138]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

mayton
И спецификацию команд наподобие упрощенного http. Типа POST/GET.

Ты же знаешь, что парсинг тестового потока в С/С++ - занятие не для слабонервных...

Posted via ActualForum NNTP Server 1.5

30 дек 20, 13:43    [22257150]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
Мда... согласен.
30 дек 20, 13:48    [22257155]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Basil A. Sidorov
Member

Откуда:
Сообщений: 10924
Я бы сказал, что разбор любого потока требует аккуратности, сосредоточенности и изобретательности.
Вне зависимости от языка
30 дек 20, 14:06    [22257171]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
tip78
Member

Откуда: Москва
Сообщений: 1266
mayton
tip78
гугли "c++ client-server"
пропущено...

это целый HTTP-сервер нужен )
а у него просто сокеты

А расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть насколько она велика.

И как вообще можно построить протокол на сокетах?

парсинг форм в fCGI - это отдельная, долгая, грустная, вопиющая песня.
обработка заголовков и роутинг - ещё пара очень грустных песен.
Простенький сервер на сокетах же просто принимает сигнал, не сильно сложнее ping-pong, и реагирует на него списком if-ов.

Задачу с протоколом не видел, человек просто хотел:
ro25man
написать простенький сервер, выполняющий запросы клиента.
30 дек 20, 17:52    [22257336]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ro25man
Member

Откуда:
Сообщений: 3
В ответах речь пошла и про http сервер, и про новый протокол. Поясню, как именно я предполагал реализовать сервер.
Использую для работы с сетью WinAPI. Может быть не самое лучшее средство, но для начала, на мой взгляд, вполне подходит. С помощью send() я отправляю запрос от клиента. Так как мне нужно вызвать функцию getTime(), то в буфер записал строку "getTime". На стороне сервера принимаю с помощью recv() данные, читаю буфер. Затем пробегаю по условиям и ищу нужную мне ветку
if (param == "getTime")
getTime();

Далее возвращаю результат клиенту. Собственно мой вопрос и заключался, единственное ли это решение для извлечения данных от сервера или есть другие варианты

Сообщение было отредактировано: 30 дек 20, 21:16
30 дек 20, 21:21    [22257422]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ro25man,
Вы новый протокол пишите или http server?
Если только протокол то дайте код сервера.
31 дек 20, 11:36    [22257540]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ro25man
Member

Откуда:
Сообщений: 3
PetroNotC Sharp,

код сервера простой. Взял на просторах интернета как есть, ничего пока не менял. В код добавил комментарий, который начинается фразой "здесь добавить мой код". Вот там и будет выполнена реализация того, что я хочу получить от сервера, мои овердофига функций, классов и т.д.
int main()
{
    WSADATA wsaData;
    int iResult;

    SOCKET ListenSocket = INVALID_SOCKET;
    SOCKET ClientSocket = INVALID_SOCKET;

    struct addrinfo* result = NULL;
    struct addrinfo hints;

    int iSendResult;
    char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;

    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != 0) 
    {
        printf("WSAStartup failed with error: %d\n", iResult);
        return 1;
    }

    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;

    // Resolve the server address and port
    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    if (iResult != 0) {
        printf("getaddrinfo failed with error: %d\n", iResult);
        WSACleanup();
        return 1;
    }

    // Create a SOCKET for connecting to server
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    if (ListenSocket == INVALID_SOCKET) 
    {
        printf("socket failed with error: %ld\n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return 1;
    }

    // Setup the TCP listening socket
    iResult = bind(ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    if (iResult == SOCKET_ERROR)
    {
        printf("bind failed with error: %d\n", WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    freeaddrinfo(result);

    iResult = listen(ListenSocket, SOMAXCONN);
    if (iResult == SOCKET_ERROR) 
    {
        printf("listen failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET)
    {
        printf("accept failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }

    // No longer need server socket
    closesocket(ListenSocket);

    // Receive until the peer shuts down the connection
    do {

        iResult = recv(ClientSocket, recvbuf, recvbuflen, 0);
        if (iResult > 0)        
        {
            printf("Bytes received: %d\n", iResult);

            /* здесь добавить мой код
            if (recvbuf== "anyText")
                anyFunc();
            else if ... и т.д.
            */

            // Echo the buffer back to the sender
            iSendResult = send(ClientSocket, recvbuf, iResult, 0);
            if (iSendResult == SOCKET_ERROR)
            {
                printf("send failed with error: %d\n", WSAGetLastError());
                closesocket(ClientSocket);
                WSACleanup();
                return 1;
            }
            printf("Bytes sent: %d\n", iSendResult);
        }
        else if (iResult == 0)
        {
            printf("Connection closing...\n");
        }
        else 
        {
            printf("recv failed with error: %d\n", WSAGetLastError());
            closesocket(ClientSocket);
            WSACleanup();
            return 1;
        }

    } while (iResult > 0);

    // shutdown the connection since we're done
    iResult = shutdown(ClientSocket, SD_SEND);
    if (iResult == SOCKET_ERROR) 
    {
        printf("shutdown failed with error: %d\n", WSAGetLastError());
        closesocket(ClientSocket);
        WSACleanup();
        return 1;
    }

    // cleanup
    closesocket(ClientSocket);
    WSACleanup();

    return 0;
}
31 дек 20, 13:23    [22257577]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ro25man
В код добавил комментарий, который начинается фразой *"здесь добавить мой код"*. Вот там и
будет выполнена реализация того, что я хочу получить от сервера, мои овердофига функций,
классов и т.д.

И вот там уже твоя первая ошибка. TCP это поток, recv() способен рубить его на
произвольные части. За раз ты можешь получить только часть того буфера, что отправлял,
или, наоборот, две отправки будут слеплены вместе. Поэтому-то выше и говорилось, что
парсинг потока - занятие нетривиальное.

Posted via ActualForum NNTP Server 1.5

31 дек 20, 13:35    [22257586]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
Тут по идее мультипоточка нужна.
31 дек 20, 14:02    [22257605]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ro25man,

Я бы делал отдельный бинарник http server и отдельный твой код.
31 дек 20, 15:47    [22257654]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov

Единственный.

А табличный метод отменили уже что-ли?

Делаем табличку в памяти (массив структур) состоящую из отсортированных идентификаторов запроса и указателя на функцию, этот запрос обрабатывающую. Тупым бинарным поиском ищем принятый идентификатор в таблице. Если не найден - ошибка. Если найден - вызываем функцию, обрабатывающий запрос с таким идентификатором передавая ей все остальные параметры запроса.
1 янв 21, 23:41    [22257980]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
tip78
Member

Откуда: Москва
Сообщений: 1266
и чем это лучше if/switch ?
2 янв 21, 00:59    [22257986]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

Я бы даже спросил "чем это отличается от if"...

Posted via ActualForum NNTP Server 1.5

2 янв 21, 01:17    [22257989]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1950
ptr128
Dimitry Sibiryakov

Единственный.

А табличный метод отменили уже что-ли?

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

Делаем табличку в памяти, состояющую из указателей на реализации методов.
В запросе передаем индекс метода, вместо его имени.
Сервер обращается к методу по индексу. Далее метод выполняет специфичный для него код (например, выбирает из тела запроса значения входных параметров метода и т.п.).
2 янв 21, 01:53    [22257991]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1950
То есть, сервер обращается к реализации метода за один шаг, как к элементу массива.

Сообщение было отредактировано: 2 янв 21, 02:01
2 янв 21, 02:06    [22257992]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov,

Я еще не встречал компилятор, разворачивающий switch в таблицу и бинарный поиск, а не тупой последовательный перебор. Пример в студию (код, компилятор, опции запуска, ассемблерный файл).
2 янв 21, 07:40    [22258004]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ptr128
Я еще не встречал компилятор, разворачивающий switch в таблицу и бинарный поиск,

Поищи, это недавно обсуждалось. Почти все они разворачивают switch в таблицу переходов.

Posted via ActualForum NNTP Server 1.5

2 янв 21, 13:08    [22258027]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dima T
Member

Откуда:
Сообщений: 15686
ptr128
Dimitry Sibiryakov,

Я еще не встречал компилятор, разворачивающий switch в таблицу и бинарный поиск, а не тупой последовательный перебор. Пример в студию (код, компилятор, опции запуска, ассемблерный файл).

17647333
2 янв 21, 13:20    [22258030]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov

ptr128
таблицу и бинарный поиск,

таблицу переходов.

Разницы не замечаете?
2 янв 21, 18:05    [22258067]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dima T,

Не вижу бинарного поиска в упор.
2 янв 21, 18:06    [22258068]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dima T
Member

Откуда:
Сообщений: 15686
ptr128
Dima T,

Не вижу бинарного поиска в упор.

Его там нет и не надо.

PS О чем спор? Топик лень читать, цитируйте качественнее.

Сообщение было отредактировано: 2 янв 21, 18:09
2 янв 21, 18:14    [22258071]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dima T
ptr128
Dimitry Sibiryakov,

Я еще не встречал компилятор, разворачивающий switch в таблицу и бинарный поиск, а не тупой последовательный перебор. Пример в студию (код, компилятор, опции запуска, ассемблерный файл).

17647333

В Вашем примере бинарного поиска не вижу в упор.

P.S. Читать надо сообщение, на которое отвечаете )))
2 янв 21, 18:24    [22258073]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ptr128
В Вашем примере бинарного поиска не вижу в упор.

А ты настаиваешь, что O(1) надо таки заменить на O(log2(N))?..

Posted via ActualForum NNTP Server 1.5

2 янв 21, 18:47    [22258081]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov,
я настаиваю, что, например, при реализации приема команд на AVR по протоколу NEC (8 бит на устройство и 8 бит на команду), перебирать несколько сот кодов последовательно - недопустимая роскошь. Например, восемь устройств по 32 команды. Для 8-битного процессора разница между между 128 и 9 (на порядок!) обращениям к таблице во флеш памяти - грандиозная.

Просто у Вас убогий и совершенно не имеющий практического применения пример. Я же привел пример и собственного опыта. Естественно, редко когда коды команд закодированы последовательно. И тем более нумерация устройств )))

Сообщение было отредактировано: 2 янв 21, 19:14
2 янв 21, 19:17    [22258090]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ptr128
Для 8-битного процессора разница между между 128 и 9 (на порядок!) обращениям к таблице во
флеш памяти - грандиозная.

А что, кто-то запрещает if-ы организовать в дерево, а не цепочку?..

Posted via ActualForum NNTP Server 1.5

2 янв 21, 19:27    [22258091]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov,

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

Я уже молчу о случае, когда у Вас Padаuk типа PFS154 всего с двумя килословами на борту и 128 байтами оперативки )))

Сообщение было отредактировано: 2 янв 21, 19:38
2 янв 21, 19:34    [22258092]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

Какое отношение всё это имеет к топикстартеру?

Posted via ActualForum NNTP Server 1.5

2 янв 21, 20:05    [22258094]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
tip78
Member

Откуда: Москва
Сообщений: 1266
ъъъъъ
ptr128
пропущено...

А табличный метод отменили уже что-ли?

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

Делаем табличку в памяти, состояющую из указателей на реализации методов.
В запросе передаем индекс метода, вместо его имени.
Сервер обращается к методу по индексу. Далее метод выполняет специфичный для него код (например, выбирает из тела запроса значения входных параметров метода и т.п.).

зачем так всё усложнять то?
в простейшем случае (вот как этот) во входящем запросе будет только цифра (код) команды
а это обычный вектор.
про http-роутинг речи же не идёт
2 янв 21, 20:19    [22258097]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov,

прямое.

Во-первых, в приведенном мной примере и был сделан аналогичный сервер на AVR. Не вижу принципиальной разницы в том, что у меня коммуникация по SPI.
Во-вторых, даже на гигабайтах и гигагерцах, при яро пропагандируемом Вами подходе, и получаются монстры требующие по 2ГБ свободной оперативки только для запуска и поедающие до 50% ресурсов многоядерных CPU.

Надеяться на оптимизацию компилятором можно только в том случае, когда точно знаешь ее возможности и ограничения, а так же давно привык анализировать ее результат по ассемблерному листингу. В противном случае, рекомендуется включать голову и использовать оптимизированные алгоритмы, которые преподают сейчас даже в школе на уроках информатики )))
2 янв 21, 20:19    [22258098]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ptr128
Не вижу принципиальной разницы в том, что у меня коммуникация по SPI.

Дело не в технологиях, а в том, что ТС - чайник, для которого простота и понятность кода
важнее его эффективности. Поэтому преждевременную оптимизацию - отставить!

Posted via ActualForum NNTP Server 1.5

2 янв 21, 20:22    [22258099]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
tip78
Member

Откуда: Москва
Сообщений: 1266
ptr128
Во-вторых, даже на гигабайтах и гигагерцах, при яро пропагандируемом Вами подходе, и получаются монстры требующие по 2ГБ свободной оперативки только для запуска и поедающие до 50% ресурсов многоядерных CPU.

если сделать на if-ах, то будет 2гб и 50% ?
2 янв 21, 20:48    [22258101]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov,

если чайника-бетонщика учить так, чтобы ему было проще и понятно, то тогда не надо ему штыковать и обрабатывать вибратором бетон при заливке фундамента? Просто залить его на порядок больше, чтобы скомпенсировать отсутствие "оптимизации" объемом? Сами в доме на таком фундаменте захотели бы жить? А программиста так обучать не то что можно, а по Вашим словам - НУЖНО! )))

Что интересно - не от Вас одного слышу такой подход. То есть строителей, врачей, слесарей, сварщиков, автомехаников - так учить недопустимо. Потому что там без "оптимизации" дом рухнет, больной успеет умереть, кран протечет, газопровод прорвет, водитель в ДТП убьется. А программистов - нужно. Комп все стерпит )))

Помнится, именно из-за проблем с отсутствием оптимизации кода пришлось отменить несколько сотен рейсов из аэропорта Хитроу, хотя на тестировании система успешно справлялась с задачей. Но упала под реальной нагрузкой.
2 янв 21, 20:52    [22258102]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
tip78
если сделать на if-ах, то будет 2гб и 50% ?

Да, если нет никаких следов алгоритмической оптимизации в тысячах методах конкретного программного продукта.

P.S. Вроде бы сайт называется sql.ru. То бишь, люди здесь должны понимать, что подобный код в какой-то CLR может вызываться миллиард раз на одном сервере в одном SQL запросе. Но все равно в лом оптимизировать алгоритм (((

Сообщение было отредактировано: 2 янв 21, 20:52
2 янв 21, 20:54    [22258103]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,

Объем не поможет. Он не работает на растяжение и сжатие. Армирование работает.
И рассчитывает монолит инженер, а рабочий выполняет инструкции.
Так и прогеры. Они давно разделились.
Оптимизация не всегда нужна.
2 янв 21, 21:48    [22258107]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,
На sql берут целиком http server. Он уже оптимизирован и протестирован.
doGet() {
      Строка урл = httpserver.дайПараметрыИзУрл();
         ....
       httpserver.отправитьОтвет(http.OK);
}
2 янв 21, 21:53    [22258109]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
...

Сообщение было отредактировано: 2 янв 21, 21:49
2 янв 21, 21:54    [22258110]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp,

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

Лично меня жизнь болезненными пинками научила оптимизировать код. Сын учится в Бауманке и там студентов заставляют считать, насколько их код оптимален. И от этой оптимальности может зависеть оценка. Что, по моему, правильно. Потому что лучше при обучении заставлять писать оптимально всегда, даже если это не существенно, чем когда слышишь от молодого специалиста: "И так нормально! Я проверял, запрос за секунды выполняется."
И задолбаешся вбивать этому специалисту в голову, что он за секунды выполняется в среде разработки, а на продуктиве через год это может вылиться в десятки минут, негатив от заказчика и ударную оптимизацию в новогодние праздники в честь закрытия года (было и такое).
2 янв 21, 22:02    [22258112]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
ptr128,
На sql берут целиком http server.

Ой, спасибо. Промышленный заказчик бы и цента не заплатил, если бы Вы предложили бы ему данные через http гонять по RS-485 )))
2 янв 21, 22:12    [22258114]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,
Странный вы.
Время отклика пишется в ТЗ.
Если заказчика устраивает цифра 100-400 мс, то вполне.
А на sql.ru сколько? Или вы интернетом не пользуетесь?)))
))))
2 янв 21, 22:18    [22258115]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,

И что такое слово "промышленный" заказчик?
Это в литейном цеху?
2 янв 21, 22:19    [22258116]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp,

"Странный Вы" (с)
Где Вы тут увидели ТЗ со временем отклика? Или просто по собственной закомплексованности решили, что "100-400 мс", а не 1-4 мс?
Я видел только задачу: сделать сервер, который должен выполнять команды.

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

Причину, почему я это делаю - описал выше. Так как достало. Кого-то удается приучить писать код оптимально. Но с другими приходится в итоге расставаться, после того как выясняется, что к ним возвращается каждый второй запрос в Jira после code review.
2 янв 21, 22:32    [22258119]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp,

что смешно, практически угадали. Да, один из подобных проектов был на ММК. Но был так же и OTIS, и MOЭК, и Камчатскэнерго и даже Россети с теми же приколами.
Впрочем, сейчас в СУЭК не легче, хоть и нет RS-485.

Сообщение было отредактировано: 2 янв 21, 22:34
2 янв 21, 22:38    [22258121]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1950
tip78
ъъъъъ
пропущено...

Делаем табличку в памяти, состояющую из указателей на реализации методов.
В запросе передаем индекс метода, вместо его имени.
Сервер обращается к методу по индексу. Далее метод выполняет специфичный для него код (например, выбирает из тела запроса значения входных параметров метода и т.п.).

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

Массив указателей - это "усложнять"?
2 янв 21, 23:33    [22258132]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
ptr128
Dimitry Sibiryakov,
я настаиваю, что, например, при реализации приема команд на AVR по протоколу NEC (8 бит на устройство и 8 бит на команду), перебирать несколько сот кодов последовательно - недопустимая роскошь. Например, восемь устройств по 32 команды. Для 8-битного процессора разница между между 128 и 9 (на порядок!) обращениям к таблице во флеш памяти - грандиозная.

Просто у Вас убогий и совершенно не имеющий практического применения пример. Я же привел пример и собственного опыта. Естественно, редко когда коды команд закодированы последовательно. И тем более нумерация устройств )))

Я не понимаю откуда возник повод обсуждать в топике микро-контроллеры AVR?

Я считаю что это какой-то странный способ доказательства своей правоты.

Сообщение было отредактировано: 3 янв 21, 02:00
2 янв 21, 23:57    [22258134]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
mayton,

А разве здесь какие-то другие обсуждаются? STM8? Или Padauk? Или если чего-то не знаете, то его не существует? Для AVR, обычно, разработка ведется именно на C/C++. Так что все в рамках темы и топика )
3 янв 21, 10:07    [22258159]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Сын учится в Бауманке и там студентов заставляют считать, насколько их код оптимален. И от этой оптимальности может зависеть оценка. Что, по моему, правильно. Потому что лучше при обучении заставлять писать оптимально всегда, даже если это не существенно, чем когда слышишь от молодого специалиста: "И так нормально! Я проверял, запрос за секунды выполняется."
И задолбаешся вбивать этому специалисту в голову, что он за секунды выполняется в среде разработки, а на продуктиве через год это может вылиться в десятки минут, негатив от заказчика и ударную оптимизацию в новогодние праздники в честь закрытия года (было и такое).

Неужели в бауманке так ограниченно преподают?
Ведь критерии разные бывают. Они многообразны.
А у вас все крутится вокруг одного - "быстро".
"Быстро надо штаны снимать".
3 янв 21, 11:18    [22258170]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Где Вы тут увидели ТЗ со временем отклика?
Если его нет, тогда критериев оптимальности решения 50 штук.
И ваше "быстрый код" вообще может не парить заказчика.
И тогда все ваши посты - в пустую. Вы ни о чем больше не рассуждаете.
Например, я выше предложил разнести код по слоям - это тоже критерий оптимальности\рациональности и эффективности.
3 янв 21, 11:21    [22258171]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
перебирать несколько сот кодов последовательно - недопустимая роскошь

когда я спросил чела из MS, и несомненного профи в системном коде Оси - почему в коде так много if на несколько экранов? Он ответил что нет в этом никаких проблем. Это обычное дело в исходниках винды)))
3 янв 21, 11:27    [22258173]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
Неужели в бауманке так ограниченно преподают?

я не собирался перечислять здесь ВСЕ критерии обучения в Бауманке. Я их даже не знаю. Вам не кажется, что Ваше заключение по одному критерию о всех - откровенный признак демагогии )))

PetroNotC Sharp
И ваше "быстрый код" вообще может не парить заказчика.

Может парить заказчика или нет - это для учащегося будет известно в будущем. А в момент обучения извольте оценивать эффективность своего кода и делать из этой оценки выводы. К слову, в олимпиадных задачах по информатики критерий эффективности присутствует практически всегда. И именно он, нередко, превращает вроде бы простую задачу в олимпиадную.

PetroNotC Sharp
Это обычное дело в исходниках винды)))

Кто бы сомневался! )))
Как же еще заставлять потребителя обновлять компьютерный парк почаще? )))

Сообщение было отредактировано: 3 янв 21, 12:04
3 янв 21, 12:07    [22258180]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
Например, я выше предложил разнести код по слоям - это тоже критерий оптимальности\рациональности и эффективности.

Для приведенного мной примера - нет. Нетехнологично. Если потребуется использовать этот код с совершенно другими кодами устройств, то редактировать коды в статической таблице намного удобней и требует меньше квалификации, чем правка условий в if-ах для этих других кодов устройств.
Табличный подход вкупе с link-time оптимизацией позволяет иметь довольно универсальный конструктор. Легко пополняемый и конфигурируемый под конкретные нужды.

Сообщение было отредактировано: 3 янв 21, 12:19
3 янв 21, 12:23    [22258181]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
извольте оценивать эффективность своего кода
по какому критерию?
ptr128
Если потребуется использовать этот код с совершенно другими кодами устройств

а если не потребуется?
ПаровозоРакетоМобиль плохо летают и ездят.
3 янв 21, 12:27    [22258182]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
PetroNotC Sharp
Например, я выше предложил разнести код по слоям - это тоже критерий оптимальности\рациональности и эффективности.

Для приведенного мной примера - нет. Нетехнологично. Если потребуется использовать этот код с совершенно другими кодами устройств, то редактировать коды в статической таблице намного удобней и требует меньше квалификации, чем правка условий в if-ах для этих других кодов устройств.
Табличный подход вкупе с link-time оптимизацией позволяет иметь довольно универсальный конструктор. Легко пополняемый и конфигурируемый под конкретные нужды.

Конкретнее. Куда ВЫ собрались if ставить? И про что вы спорите?
doGet() {
      Строка урл = httpserver.дайПараметрыИзУрл();
         ....
       httpserver.отправитьОтвет(http.OK);
}
3 янв 21, 12:32    [22258184]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
ptr128
mayton,

А разве здесь какие-то другие обсуждаются? STM8? Или Padauk? Или если чего-то не знаете, то его не существует? Для AVR, обычно, разработка ведется именно на C/C++. Так что все в рамках темы и топика )

В мире существует огромное количество вещей, которые я не знаю.

Кстати. Вы не читали "Сказку о Тройке" Стругацких?
3 янв 21, 12:43    [22258185]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
ptr128
извольте оценивать эффективность своего кода
по какому критерию?

Простите, но тут уже я отошлю Вас читать.

В данном конкретном примере:
"при реализации приема команд на AVR по протоколу NEC (8 бит на устройство и 8 бит на команду), перебирать несколько сот кодов последовательно - недопустимая роскошь. Например, восемь устройств по 32 команды. Для 8-битного процессора разница между между 128 и 9 (на порядок!) обращениям к таблице во флеш памяти - грандиозная."
Использование таблицы и двоичного поиска одновременно сокращает и использование памяти и время выполнения без каких-либо негативных эффектов.

Неужели у Вас настолько ограничено сознание, что фразу "сервер на С++" Вы просто не способны воспринять иначе, как "http сервер"? Ведь запросы к серверу могут вообще через общую память поступать, а не по сети!

Что прикольно, Вы даже не пытаетесь критиковать предложенную мной реализацию по существу. Вы критикуете сам факт предложения оптимизировать алгоритм! Рекомендую научиться читать/слушать чужое мнение. А то Ваше пристрастие к "Золотому молотку" может очень плохо для Вас же и закончится.
3 янв 21, 12:47    [22258186]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
mayton
В мире существует огромное количество вещей, которые я не знаю.

Кстати. Вы не читали "Сказку о Тройке" Стругацких?

Что интересно, с годами таких вещей становится только больше )
Естественно читал. Мне 54 года.
3 янв 21, 12:50    [22258187]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Неужели у Вас настолько ограничено сознание, что фразу "сервер на С++" Вы просто не способны воспринять иначе, как "http сервер"? Ведь запросы к серверу могут вообще через общую память поступать, а не по сети!

Хммм...
Мы спорим про разное.
Вы спорите о куске кода не поднимая головы.
Я говорил об архитектуре в целом.
Как я восприму иначе сервер, если я полностью согласен с мембером выше MasterZiv 22256908
Сначала - протокол!
)))
3 янв 21, 13:01    [22258191]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Вы даже не пытаетесь критиковать предложенную мной реализацию по существу

я пытаюсь понять суть вашего предложения не ломая архитектуру.
Мы можем не изобретать новый сервер с новым протоколом?
Донесите суть вашего предложения.
Я прикладник больше а не системщик.
Конечно, вы можете не понимать архитектурные вопросы а я вопросы системного уровня)

Сообщение было отредактировано: 3 янв 21, 13:03
3 янв 21, 13:05    [22258195]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp,

на данный момент ТС протокол не озвучил. Скорее всего, он даже его еще не выбрал. Поэтому я и готов его воспринимать любым: REST, SNMP, ModBus, ProfiBus, HDLC, CAN, LIN, SPI, I2C и т.п. Или даже кольцевым буфером в shared memory с семафором.

Вы же явно демонстрируете приверженность к Золотому молотку
3 янв 21, 13:11    [22258198]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Вы же явно демонстрируете приверженность к Золотому молотку

Ну хотя бы поближе к классике
Картинка с другого сайта.
Почему я должен сначала смотреть протокол для пульта телевизора?

Сообщение было отредактировано: 3 янв 21, 13:11
3 янв 21, 13:16    [22258199]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
REST
это не протокол
3 янв 21, 13:17    [22258200]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp

Донесите суть вашего предложения.


Изначальная постановка:
ro25man
передавать какой-то признак (текст, число), который будет привязан к функции getTime(). На сервере добавить переменную и выполнять её обработку через if или switch. Это выглядит примерно так:
if (param == "getTime")
getTime();
и т.д. для каждой функции сервера. То есть если на сервере будет 1000 таких функций, то для каждой из них мне нужно будет делать ветку else if? Аналогично при использовании оператора switch.
Есть другие способы для выполнения таких запросов или это единственный?


Итак, 1000 функций, идентифицируемых каким-то признаком (текст или число).
Вопрос: обязательно ли писать тысячу if или case?

Ответ:
ptr128

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


То есть, мы в массиве структур разместили 1000 идентификаторов в отсортированном порядке и в паре с указателем на функцию, обрабатывающей запрос с этим идентификатором. Теперь используя двоичный поиск мы можем за 11 обращений к этой таблице вызвать функцию, обрабатывающую полученный запрос.
Профит: меньше кода, меньше потребляемой памяти, быстрее обработка.
3 янв 21, 13:20    [22258201]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,
))) теперь понятно.
Мой ответ с точки зрения архитектуры - не пилите свой сервер и протокол велосипед.
Возьмите готовые решения.
Удачи!
3 янв 21, 13:25    [22258203]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
mayton
Member

Откуда: loopback
Сообщений: 51015
ptr128
mayton
В мире существует огромное количество вещей, которые я не знаю.

Кстати. Вы не читали "Сказку о Тройке" Стругацких?

Что интересно, с годами таких вещей становится только больше )
Естественно читал. Мне 54 года.

Ну. Это же прекрасно.

Не будем с вами - как товарищ Хлебовводов. Спрашивать типа "Не Машкин это а Бабкин." или
что товарищ ВРИО нам так и не объяснил как "она ответ выдает".
3 янв 21, 13:32    [22258206]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
Почему я должен сначала смотреть протокол для пульта телевизора?

А где было сказано, что не должны? )))
Это и есть закомплексованность сознания. Если на найденной вами картинке в качестве протокола сетевого уровня есть только IP, из этого совершенно не следует, что не бывает других протоколов сетевого уровня.
Если на этой же картинке отсутствет протокол SNMP, то из этого совершенно не следует, что он не может быть использован в данном случае.

Про REST бессмысленно спорить, так как это исключительно вопрос терминологии. При одной терминологии протоколом может считаться даже API. При другой - ограничиваемся только OSI. В рамках OSI REST действительно не протокол.
3 янв 21, 13:33    [22258207]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
А где было сказано, что не должны? )))

Блин, в первом классе ребенку выдают БУКВАРЬ.
Сначала берут классику и попутно ЖДУТ эврику и яблоко на голову для изобретения.
))))
ptr128
что не бывает других протоколов сетевого уровня.

сделайте обзор, кто против?
ptr128
Про REST бессмысленно спорить, так как это исключительно вопрос терминологии.

я понял - вы революционер! От прошлого камня на камне не оставим!
3 янв 21, 13:39    [22258209]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp

Возьмите готовые решения.

Вы про SNMP (Net-SNMP) или про ProfiBus? В обоих описанная ТС функциональсть уже встроена и вообще не требует программирования, тем более на C++ )))

Или все же прочитаем ТС?
ro25man
Решил поизучать серверные приложений на c++ и написать простенький сервер, выполняющий запросы клиента.
3 янв 21, 13:41    [22258210]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,
Скажите, у вас логгеры готовые или самописные в проектах?
3 янв 21, 13:42    [22258211]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Или все же прочитаем ТС?

Взрослые учат детей не делать велосипедов.
Хотя согласен бывают вундеркинды).
Они _против_ советов делают гениальности.
Вы - предлагайте написать свой сервер с нуля.
Я - говорю что есть готовое.
Все логично.
3 янв 21, 13:46    [22258212]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
ptr128,
Скажите, у вас логгеры готовые или самописные в проектах?

Исходя из задачи. В каких-то случаях syslog хватает. В каких-то - TimeScaleDB или InfluxDB. Присматриваюсь к ClickHouse. В каких-то - самописные.
Что Вы хотели этим узнать?
3 янв 21, 13:47    [22258213]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
Я - говорю что есть готовое.
Все логично.

Не вижу логики. ТС решил уже написать свой сервер с нуля в рамках самообразования. И спрашивал не о том, стоит ли ему этим заниматься, а о том, как это лучше сделать.
Вы действительно не видите разницы?
Или очень стремитесь свой "Золотой молоток" вручить еще кому то? )))

Сообщение было отредактировано: 3 янв 21, 13:45
3 янв 21, 13:49    [22258214]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp
Взрослые учат детей не делать велосипедов.

Соболезную Вашим детям.
То есть, раз есть компьютер или калькулятор, то таблицу умножения учить не зачем?
А раз Maxima или Mapple успешно решает квадратные уравнения, то уметь решать эти же квадратные уравнения самому тоже не нужно? )))
Вы уж простите, но если изобретать велосипед и впрямь не стоит, то делать свой велосипед, для того чтобы изучить конструкции велосипедов - необходимо. Ну не научитесь Вы никогда делать велосипеды, если не попрактикуетесь в их изготовлении )))
3 янв 21, 14:01    [22258217]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,
Как вы любите поучать то).
Уже и на детей перешли)).
Везде должна быть разумная середина. Без крайностей.
Я как раз спрашивал про либы логирования.
Крайности это все писать самому. И логгеры серверы протоколы тоже.
Я же выше написал. Вы учите ТС в целях обучения.
А я буду обучать в целях практического применения.
3 янв 21, 16:54    [22258257]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
tip78
Member

Откуда: Москва
Сообщений: 1266
ptr128
PetroNotC Sharp
Например, я выше предложил разнести код по слоям - это тоже критерий оптимальности\рациональности и эффективности.

Для приведенного мной примера - нет. Нетехнологично. Если потребуется использовать этот код с совершенно другими кодами устройств, то редактировать коды в статической таблице намного удобней и требует меньше квалификации, чем правка условий в if-ах для этих других кодов устройств.
Табличный подход вкупе с link-time оптимизацией позволяет иметь довольно универсальный конструктор. Легко пополняемый и конфигурируемый под конкретные нужды.

что вы будете делать со своей таблицей, когда условий будет несколько?
/client/227/?from=1&to=20&sort=1
3 янв 21, 19:10    [22258281]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
tip78
что вы будете делать со своей таблицей, когда условий будет несколько?

Если сообщение имеет полезную нагрузку(payload), то он просто передается вызываемой функции-обработчику в качестве параметра.
Иногда есть смысл выполнить полную или частичную десериализацию payload. Тогда функции-обработчику в качестве параметра(ов) достается уже десериализованный payload.
3 янв 21, 19:35    [22258297]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp,

но Вы так и не ответили! Так нужно учить таблицу умножения и уметь решать квадратные уравнения без компьютера? )))
3 янв 21, 19:37    [22258298]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp

Я как раз спрашивал про либы логирования.

Я не заметил вопроса о библиотеках журналирования вообще. Был вопрос о журналировании. Потому и получили ответ не о том, как приложение пишет в журнал, а о том, куда журналы множества источников направляются и где анализируются. )))

PetroNotC Sharp

Везде должна быть разумная середина. Без крайностей.

Уже лучше! Вы хотя бы признаете, что крайности, как например вообще отказ от обучения написания сервера на C++ - не допустимы. И очень хорошо, что Вы признали свою ошибку. Да, городить неделями сложный сервер на C++ в рамках обучения смысла мало. Отказаться вообще от его изучения - тоже. Золотая середина - попробовать простую реализацию с трудоемкостью в несколько часов. Максимум - несколько дней.

PetroNotC Sharp

Вы учите ТС в целях обучения. А я буду обучать в целях практического применения.

Вы что-то перепутали )))
Я не учу ТС, а просто отвечаю на прямой вопрос им поставленный. Дальше - его выбор. А Вы как раз учите его жизни, пытаясь вручить ему свой "Золотой молоток" и говоря ему, что он должен делать, а что не должен )))

Сообщение было отредактировано: 3 янв 21, 19:47
3 янв 21, 19:48    [22258308]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ptr128
Так нужно учить таблицу умножения и уметь решать квадратные уравнения без компьютера? )))

Надо ли их учить ДО сложения и вычитания?..

Posted via ActualForum NNTP Server 1.5

3 янв 21, 20:01    [22258310]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov,

нет, конечно. Так же как не надо пытаться писать код на C++ не зная языка. Но какая связь с текущей ситуацией?

PetroNotC Sharp
Взрослые учат детей не делать велосипедов.


ptr128

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


Сообщение было отредактировано: 3 янв 21, 20:04
3 янв 21, 20:06    [22258311]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 52913

ptr128
Но какая связь с текущей ситуацией?

Прямая. Топикстартер не освоил азы, а ты его тычешь носом в (не зря) третий том Кнута.

Posted via ActualForum NNTP Server 1.5

3 янв 21, 20:19    [22258316]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov

ro25man
есть если на сервере будет 1000 таких функций, то для каждой из них мне нужно будет делать ветку else if? Аналогично при использовании оператора switch.

Единственный.


Так все же единственный или нет? Табличный способ не существует? Или только в Вашем сознании?
3 янв 21, 20:20    [22258317]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov

Прямая. Топикстартер не освоил азы, а ты его тычешь носом в (не зря) третий том Кнута.

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

Если же говорить о промышленном решении с тысячами обработчиков, то я тогда бы предложил подумать о более эффективной индексации (B-Tree, brin, hash). Но это, опасаюсь, уже за пределами знаний ТС.

Сообщение было отредактировано: 3 янв 21, 20:27
3 янв 21, 20:24    [22258318]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
Dimitry Sibiryakov

Прямая. Топикстартер не освоил азы, а ты его тычешь носом в (не зря) третий том Кнута.

В качестве вишенки на торт. Я нигде не предлагал самому писать алгоритм двоичного поиска. Никто не запрещает воспользоваться стандартной функцией bsearch()
3 янв 21, 20:47    [22258329]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Если сообщение имеет полезную нагрузку(payload), то он просто передается вызываемой функции-обработчику в качестве параметра.

изобрели RPC
3 янв 21, 21:14    [22258341]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
PetroNotC Sharp,

но Вы так и не ответили! Так нужно учить таблицу умножения и уметь решать квадратные уравнения без компьютера? )))

это в раздел методы сортировки.
А в архитектуре изучают ТЭО, паттерны программирования, слои, ООП, инкапсуляцию, системный анализ
3 янв 21, 21:16    [22258343]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128
Я не заметил вопроса о библиотеках журналирования вообще. Был вопрос о журналировании.

Вы и счас дважды не заметили. Писать все самому это свойство характера. Увы.
ptr128
Вы что-то перепутали )))
Я не учу ТС, а просто отвечаю на прямой вопрос им поставленный

со стороны виднее.
Расскажите лучше с третьей попытки про логирование в ваших проектах.
)))
Вы упрямо пытаетесь показать что вы человек-оркестр или многостаночник).
Однако этот термин уже стал нарицательным.
Я же не лезу в вашу область системного кода.
А вы лезете наверх. Безуспешно.
3 янв 21, 21:23    [22258346]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 887
PetroNotC Sharp,

прощу прощения, но так Вы полностью уйдя от темы перешли на личности, доказав, что Вы демагог, в дальнейшем общении с Вами смысла не наблюдаю )
3 янв 21, 22:00    [22258366]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 7634
ptr128,
>Вы сильно отстали от жизни
Ваше?
А ведь это не мне).
Общайтесь с ТС. Я не против.
Наши области не пересекаются)
3 янв 21, 22:09    [22258369]     Ответить | Цитировать Сообщить модератору
 Re: Отправить задание c++ серверу  [new]
petrav
Member

Откуда:
Сообщений: 2861
ptr128
PetroNotC Sharp,

что Вы демагог, в дальнейшем общении с Вами смысла не наблюдаю )

Не только вы не наблюдаете таких смыслов. Это нормально.
4 янв 21, 14:55    [22258517]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4      [все]
Все форумы / C++ Ответить