|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
Здравствуйте Решил поизучать серверные приложений на c++ и написать простенький сервер, выполняющий запросы клиента. Есть клиент, с которого я отправляю запрос, чтобы выполнить какую-либо операцию на сервере. Пусть это будет функция, возвращающая текущее время getTime(). Как заставить сервер выполнить эту функцию? Единственное предположение - это передавать какой-то признак (текст, число), который будет привязан к функции getTime(). На сервере добавить переменную и выполнять её обработку через if или switch. Это выглядит примерно так: if (param == "getTime") getTime(); и т.д. для каждой функции сервера. То есть если на сервере будет 1000 таких функций, то для каждой из них мне нужно будет делать ветку else if? Аналогично при использовании оператора switch. Есть другие способы для выполнения таких запросов или это единственный? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 22:00 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
ro25manЕсть другие способы для выполнения таких запросов или это единственный? Единственный. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 23:16 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
В вопросе есть два вопроса. Первое - это протокол. Как передать по сети. Да хоть так. Код: plaintext 1.
Второе - это реализация. Можно switch. Можно if. Можно еще много чего придумать но ты начни хотя-бы с клиент-сервера на сокетах. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2020, 23:54 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
ro25man Есть другие способы для выполнения таких запросов или это единственный? От используемых технологий зависит. Например, реализуя сервер как Web сервис/службу, ты напрямую создаешь на сервере реализацию нужных методов. А клиент обращается прямо к нужному методу. Далее волшебным образом запрос клиента преобразуется в запрос низкого уровня, поток данных передается на сервер, где-то невидимо от тебя выполняется цепочка else-if, и вызывается нужны тебе метод, результат возвращается клиенту. Подобных технологий и библиотек - масса. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 00:59 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
гугли "c++ client-server" mayton Да хоть так. Код: plaintext 1.
это целый HTTP-сервер нужен ) а у него просто сокеты ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 09:50 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
ro25man Единственное предположение - это передавать какой-то признак (текст, число), который будет привязан к функции getTime(). На сервере добавить переменную и выполнять её обработку через if или switch. Это выглядит примерно так: if (param == "getTime") getTime(); и т.д. для каждой функции сервера. То есть если на сервере будет 1000 таких функций, то для каждой из них мне нужно будет делать ветку else if? Аналогично при использовании оператора switch. Есть другие способы для выполнения таких запросов или это единственный? Эта штука называется "сетевой протокол" и тебе надо либо придумать свой, либо использовать существующие. При этом конечно IF/SWITCH там в коде в явном виде может и не быть, но суть действий всё равно такая: по какому-то типу запроса будут вызываться на выполнение какие-то действия. И от этого IF/SWITCH конечно же никуда не уйти. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 09:58 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
tip78 гугли "c++ client-server" mayton Да хоть так. Код: plaintext 1.
это целый HTTP-сервер нужен ) а у него просто сокеты А расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть насколько она велика. И как вообще можно построить протокол на сокетах? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 10:55 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
MasterZiv, +1 Слово просто "сервер" не существует. Без указания протокола/архитектуры. Есть сокет сервер, веб сервер, аппСервер, фтпСервер..... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 11:16 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
maytonА расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть насколько она велика. Размером в сумму всех RFC, расписывающих HTTP заголовки и соответствющие им форматы данных. Несколько мегабайт нужного чтения наберётся. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 13:12 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonА расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть насколько она велика. Размером в сумму всех RFC, расписывающих HTTP заголовки и соответствющие им форматы данных. Несколько мегабайт нужного чтения наберётся. Автор - пытается построить свой протокол. Я предполагаю что поверх сокетов. Хотел предложить ему сначала telnet как клиента. И спецификацию команд наподобие упрощенного http. Типа POST/GET. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 13:35 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
maytonИ спецификацию команд наподобие упрощенного http. Типа POST/GET. Ты же знаешь, что парсинг тестового потока в С/С++ - занятие не для слабонервных... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 13:43 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
Мда... согласен. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 13:48 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
Я бы сказал, что разбор любого потока требует аккуратности, сосредоточенности и изобретательности. Вне зависимости от языка ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 14:06 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
mayton tip78 гугли "c++ client-server" пропущено... это целый HTTP-сервер нужен ) а у него просто сокеты А расскажи какая разница между HTTP сервером и сокетами? Или протоколом telnet. Тоесть насколько она велика. И как вообще можно построить протокол на сокетах? парсинг форм в fCGI - это отдельная, долгая, грустная, вопиющая песня. обработка заголовков и роутинг - ещё пара очень грустных песен. Простенький сервер на сокетах же просто принимает сигнал, не сильно сложнее ping-pong, и реагирует на него списком if-ов. Задачу с протоколом не видел, человек просто хотел: ro25man написать простенький сервер, выполняющий запросы клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 17:52 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
В ответах речь пошла и про http сервер, и про новый протокол. Поясню, как именно я предполагал реализовать сервер. Использую для работы с сетью WinAPI. Может быть не самое лучшее средство, но для начала, на мой взгляд, вполне подходит. С помощью send() я отправляю запрос от клиента. Так как мне нужно вызвать функцию getTime(), то в буфер записал строку "getTime". На стороне сервера принимаю с помощью recv() данные, читаю буфер. Затем пробегаю по условиям и ищу нужную мне ветку if (param == "getTime") getTime(); Далее возвращаю результат клиенту. Собственно мой вопрос и заключался, единственное ли это решение для извлечения данных от сервера или есть другие варианты ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2020, 21:21 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
ro25man, Вы новый протокол пишите или http server? Если только протокол то дайте код сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 11:36 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, код сервера простой. Взял на просторах интернета как есть, ничего пока не менял. В код добавил комментарий, который начинается фразой "здесь добавить мой код" . Вот там и будет выполнена реализация того, что я хочу получить от сервера, мои овердофига функций, классов и т.д. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 13:23 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
ro25manВ код добавил комментарий, который начинается фразой *"здесь добавить мой код"*. Вот там и будет выполнена реализация того, что я хочу получить от сервера, мои овердофига функций, классов и т.д. И вот там уже твоя первая ошибка. TCP это поток, recv() способен рубить его на произвольные части. За раз ты можешь получить только часть того буфера, что отправлял, или, наоборот, две отправки будут слеплены вместе. Поэтому-то выше и говорилось, что парсинг потока - занятие нетривиальное. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 13:35 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
Тут по идее мультипоточка нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 14:02 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
ro25man, Я бы делал отдельный бинарник http server и отдельный твой код. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2020, 15:47 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Единственный. А табличный метод отменили уже что-ли? Делаем табличку в памяти (массив структур) состоящую из отсортированных идентификаторов запроса и указателя на функцию, этот запрос обрабатывающую. Тупым бинарным поиском ищем принятый идентификатор в таблице. Если не найден - ошибка. Если найден - вызываем функцию, обрабатывающий запрос с таким идентификатором передавая ей все остальные параметры запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2021, 23:41 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
и чем это лучше if/switch ? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2021, 00:59 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
Я бы даже спросил "чем это отличается от if"... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2021, 01:17 |
|
Отправить задание c++ серверу
|
|||
---|---|---|---|
#18+
ptr128 Dimitry Sibiryakov Единственный. А табличный метод отменили уже что-ли? Делаем табличку в памяти (массив структур) состоящую из отсортированных идентификаторов запроса и указателя на функцию, этот запрос обрабатывающую. Тупым бинарным поиском ищем принятый идентификатор в таблице. Если не найден - ошибка. Если найден - вызываем функцию, обрабатывающий запрос с таким идентификатором передавая ей все остальные параметры запроса. Делаем табличку в памяти, состояющую из указателей на реализации методов. В запросе передаем индекс метода, вместо его имени. Сервер обращается к методу по индексу. Далее метод выполняет специфичный для него код (например, выбирает из тела запроса значения входных параметров метода и т.п.). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2021, 01:53 |
|
|
start [/forum/topic.php?fid=57&fpage=4&tid=2017273]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
62ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 251ms |
total: | 430ms |
0 / 0 |