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

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

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

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

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

Откуда: loopback
Сообщений: 51017
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

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

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

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

Откуда:
Сообщений: 7650
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

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

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

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

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

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

Откуда: loopback
Сообщений: 51017
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

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

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

Откуда:
Сообщений: 7650
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

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

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

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

Откуда:
Сообщений: 7650
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

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

Откуда: loopback
Сообщений: 51017
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

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

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

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

я понял - вы революционер! От прошлого камня на камне не оставим!
3 янв 21, 13:39    [22258209]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / C++ Ответить