|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
В общем, примерно понятно. Точные сроки вам никто не скажет, мой оффер такой: Если исходить из предположения, что будет а) нормально сформулированное ТЗ б) контактное лицо для оперативных ответов по возникающим моментам в) доступ к тестовому окружению (сервер, БД, клиенты), то сроки от 1 недели до месяца. Предварительно: клиенты - балансировщик nginx - транспортный сервер (в виде dll, запускаемый внутренним менеджером) - БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2013, 17:43 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Arm79В общем, примерно понятно. Точные сроки вам никто не скажет, мой оффер такой: Если исходить из предположения, что будет а) нормально сформулированное ТЗ б) контактное лицо для оперативных ответов по возникающим моментам в) доступ к тестовому окружению (сервер, БД, клиенты), то сроки от 1 недели до месяца. Предварительно: клиенты - балансировщик nginx - транспортный сервер (в виде dll, запускаемый внутренним менеджером) - БД. Ок, ну я тогда отпишусь на мыло, что есть в контактных данных и можно начинать договариваться? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2013, 17:50 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
JustOxlamon, Угу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2013, 18:01 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
JustOxlamonnetivanJustOxlamon, теперь мне не очень понятен суть клиента и сервера. Сервер - это хрень, которая слушает TCP порты и отвечает на них в зависиомсти от клиента (видимо ответ берется из базы), или как? Один клиент - один порт, или один порт- Х клиентов (судя по примеру)... я бы вообще сделал через WCF это надо. Мне кажется в итоге и получится некий велосипед... А задача на самом деле очень интересная и как правильно заметил выше Арм, оч много можно всего накрутить. Вопрос именно в требовании. Я бы тоже писал на WCF\tcp.net и был бы счастлив т.к. строгая типизация, норм трафик и ваще полная няшка. Но тут на клиент мы не влияем никак. Поэтому протокол уже есть и фиксирован. Много клиентов, один сервер, слушает один порт. Самих серверов может быть до 6 штук. Действительно требуется только примерно вот это: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
+/- детали НЕ усложняющие разработку. Которые будут оговорены ВНАЧАЛЕ во время написания совместного ТЗ, возможно по скайпцу. Остальное мы наговнокодим сами ) Сервер - обрабатывает 1 порт и передает его нужному клиенту ( опередялет по сообщению), клиент обрабатывает сообщение и отдает его обратно, так? Тогда у меня есть тоже мысли :) В "лоб" я бы не стал тут делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2013, 18:15 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
JustOxlamon, Насколько я понял из описаний и "реализации", ежели клиент зацепился за соединение, то тупо держит его всё время пока сам не отвалится, либо его не отвалят... - по ресурсам это чуть более чем дохрена... Далее, все клиенты в одном Application Domain - это очень плохо. Поймал кто-нибудь необработанный Exception и практически можно завалить весь "сервер" с остальными клиентами. Отсюда вывод - работа с клиентом должна быть вынесена в отдельный AppDomain, соответственно плагинная архитектура. Кроме того, для распределения нагрузки (если это возможно) клиентские потоки должны просто обрабатывать сообщения клиентов из очереди. Притом в очередь они(сообщения) должны попадать и забираться асинхронно. Ну тут, как говорится всё от клиента зависит, т.е. от самого протокола. И ещё, если по количеству соединений вроде как ограничения могут быть преодолены, то вот по количеству потоков - ну тут уж прямо и не знаю... 10К потоков одновременно... возвращаемся про "чуть более чем дохрена ресурсов"... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.11.2013, 22:13 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, Да, со всем согласен. Опыта у меня в такой разработке чуть меньше чем нету. Ранее всю черную работу делал за меня WCF\IIS. На текущий момент договорились работать с Arm79. Поэтому обсуждение можно пока свернуть, спасибо всем кто отписался. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 07:48 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
JustOxlamon, Это то что пришло навскидку, и заодно предупредил о возможных подводных камнях... И ещё мысли в слух: С точки зрения оптимизации нагрузки, сервис должен крутиться на машинке без всяких там IIS+SQL и т.д. , т.е. только сервис + брандмауэр. Соответственно сервис должен иметь возможность управляться извне... подумайте также и над этим... Кстати, ещё один небольшой совет: для реализации плагинной архитектуры я бы отказался от использования интерфейсов, в пользу единого абстрактного класса, от которого будут порождаться конкретные реализации, работающие с клиентом... Так можно больше контроля сделать... Слой работы с базой также лучше вынести в отдельный AppDomain... Из своего опыта: в моей реализации подобной архитектуры, обрабатывающие модули могут быть загружены и выгружены динамически, при этом сервис и остальные модули продолжают работать. В случае сбоя одного из модулей, остальные также продолжают работать... Всё это достигается за счёт использования различных доменов приложений. Единственная сложность в данном случае - это межпроцессные коммуникации... Учтите, что за неделю такие вещи сложно реализовать. Например, у меня на реализацию с нуля нормального SMPP клиента работающего в качестве шлюза ушло порядка 3-х месяцев по 2-3 часа в день работы над проектом. Так что... PS. Даа... интересный должен быть проект... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 09:26 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Alex KuznetsovJustOxlamon, Это то что пришло навскидку, и заодно предупредил о возможных подводных камнях... И ещё мысли в слух: С точки зрения оптимизации нагрузки, сервис должен крутиться на машинке без всяких там IIS+SQL и т.д. , т.е. только сервис + брандмауэр. Соответственно сервис должен иметь возможность управляться извне... подумайте также и над этим... Кстати, ещё один небольшой совет: для реализации плагинной архитектуры я бы отказался от использования интерфейсов, в пользу единого абстрактного класса, от которого будут порождаться конкретные реализации, работающие с клиентом... Так можно больше контроля сделать... Слой работы с базой также лучше вынести в отдельный AppDomain... Из своего опыта: в моей реализации подобной архитектуры, обрабатывающие модули могут быть загружены и выгружены динамически, при этом сервис и остальные модули продолжают работать. В случае сбоя одного из модулей, остальные также продолжают работать... Всё это достигается за счёт использования различных доменов приложений. Единственная сложность в данном случае - это межпроцессные коммуникации... Учтите, что за неделю такие вещи сложно реализовать. Например, у меня на реализацию с нуля нормального SMPP клиента работающего в качестве шлюза ушло порядка 3-х месяцев по 2-3 часа в день работы над проектом. Так что... PS. Даа... интересный должен быть проект... Да, спасибо еще раз. Я понимаю, что сроки тут без знания, что конкретно я хочу получить сложно определить. Комп где будет все крутится чистый, аки агнец невинный. 2008 r2, и все что пожелает разработчик. А слой с БД почему надо выносить в отдельный AppDomain? есть какие-то предпосылки к этому? И еще вопрос, как вы реализовали выгрузку модулей? У дотнета с эти проблемы. Как я понимаю только используя AppDomain? Но тут вопрос скорости встает. В нашем проекте очень-очень-очень хотелось бы реализовать подобное. Пока решается это рестартом, из-за того что 2 версии одной длл не могут быть загружены (мы не пользовали appdomain, а просто assembly.load) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 10:05 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
В идеале я бы хотел подобную архитектуру: Код: c# 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 10:07 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, очереди тоже думал, но в случае, если соединение держится не вижу в них смысла особого. Каждый плагин в домене это перебор ) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 10:45 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Быть может, стоит посмотреть в сторону Node.js? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 11:02 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
JustOxlamon, Покажу кусочки кода: MyProcessorFactory Код: c# 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.
MyAppProcessor Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
MyProcessorAssembly Код: c# 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.
MyProcessor - и есть тот абстрактный класс на основании которого созданы последующие обработчики, которые реализуют соответствующую бизнес логику. netivan...Каждый плагин в домене это перебор ) Не думаю. Представьте себе ситуацию, когда сторонняя библиотека роняет сервис и Вам звонят клиенты у которых "денюшки" пропали... потому что по причине криворукости программистов компании А, свалился сервис в который была подгружена библиотека от компании Б... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 13:10 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, Огромное спасибо, я покопаю в ту сторону, конечно из-за реалтаймовского характера приложения, смущает проблема скорости. Вы обошлись тут без интерфейсов, у нас тоже базовый абстрактный класс. По-моему это супер. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 13:47 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
JustOxlamonAlex Kuznetsov, Огромное спасибо, я покопаю в ту сторону, конечно из-за реалтаймовского характера приложения, смущает проблема скорости. Вы обошлись тут без интерфейсов, у нас тоже базовый абстрактный класс. По-моему это супер. А что скорость - она от скорости обработки запроса зависит... У меня под тестовой нагрузкой сервис за одну секунду обрабатывал до 512 сообщений, а это, принятие + парсинг + уложить в базу + обработать + отослать ответ + уложить ответ в базу... И это при том, что всё крутилось в виртуалке с ХР, с установленной в ней студией, SQL сервером, запущенным IIS, сервис был с отладочной инфой, трейсингом и т.д., памяти было выделено под виртуалку всего 3 гига... пакеты шли пачкой по 512 сообщений. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 13:57 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Alex KuznetsovJustOxlamonAlex Kuznetsov, Огромное спасибо, я покопаю в ту сторону, конечно из-за реалтаймовского характера приложения, смущает проблема скорости. Вы обошлись тут без интерфейсов, у нас тоже базовый абстрактный класс. По-моему это супер. А что скорость - она от скорости обработки запроса зависит... У меня под тестовой нагрузкой сервис за одну секунду обрабатывал до 512 сообщений, а это, принятие + парсинг + уложить в базу + обработать + отослать ответ + уложить ответ в базу... И это при том, что всё крутилось в виртуалке с ХР, с установленной в ней студией, SQL сервером, запущенным IIS, сервис был с отладочной инфой, трейсингом и т.д., памяти было выделено под виртуалку всего 3 гига... пакеты шли пачкой по 512 сообщений. 512 в секнду в записью в базу? Да вы монстр. По поводу доменов наверное согласен, если считать что плагины пишет другой человек, то да. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 14:30 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
netivan512 в секнду в записью в базу? Да вы монстр... Ну почему сразу монстр? Обычная очередь, плюс поток, плюс пулл соединений... Всё нормально... В данном случае задача сервиса была дать как можно быстрый ответ SMPP серверу о том, что пакет получен, распарсен и принят в обработку, а когда оно именно в базу попадёт - это уже вопрос отдельный ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 15:17 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
Alex Kuznetsovnetivan512 в секнду в записью в базу? Да вы монстр... Ну почему сразу монстр? Обычная очередь, плюс поток, плюс пулл соединений... Всё нормально... В данном случае задача сервиса была дать как можно быстрый ответ SMPP серверу о том, что пакет получен, распарсен и принят в обработку, а когда оно именно в базу попадёт - это уже вопрос отдельный очередь, так и писали бы : отправилась "задача" на запись в базу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 15:28 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
netivan... очередь, так и писали бы : отправилась "задача" на запись в базу :) Ну можно и так сказать... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.11.2013, 15:33 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
народ подскажите в чем трабла Код: c# 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.
опрашивает первые 3 раза (на одном порту 4 прибора у них разные коды) а потом пишет Trace|SocketException: {0} ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2014, 09:24 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
а кто будет делать NetworkStream.Dispose и TcpClient.Close ?? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2014, 09:49 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
des1roer Код: c# 1. 2. 3. 4. 5. 6.
Вот это шедевр. public bool ThreadState { get { return doWork; } } ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2014, 09:50 |
|
TCP\SSL-Server на C#
|
|||
---|---|---|---|
#18+
des1roer Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Так делать можно, но не нужно, из старого кода: отдельный тред Код: c# 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. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230.
... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2014, 09:59 |
|
|
start [/forum/topic.php?fid=20&msg=38468972&tid=1402226]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 378ms |
total: | 513ms |
0 / 0 |