|
|
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
Тут есть много знающих людей, посмотрите пожалуйста, может какой-нибудь криминал увидите. Опыта пока мало, сильно не пинайте))) Но вроде в целом конструкция работает. Единственное, что заметил - при подключении одновременно 3-5 клиентов скорость передачи заметно падает, частенько кто-то отваливается по таймауту: s1.setSoTimeout(ACCEPT_TIMEOUT * 1000); Устанавливаю его 30 сек, может есть смысл сделать больше ? Заранее благодарю! Код: java 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. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. 248. 249. 250. 251. 252. 253. 254. 255. 256. 257. 258. 259. 260. 261. 262. 263. 264. 265. 266. 267. 268. 269. 270. 271. 272. 273. 274. 275. 276. 277. 278. 279. 280. 281. 282. 283. 284. 285. 286. 287. 288. 289. 290. 291. 292. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 11:06 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
korshunНо вроде в целом конструкция работает. Единственное, что заметил - при подключении одновременно 3-5 клиентов скорость передачи заметно падает Сами себе противоречите. Код: java 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. Итак вердикт В первую очередь к изучению Соглашения о кодировании: https://www.google.com/search?q=Java Coding convention Готовые opensource решения, и конечно же Maven. Не руками же их подключать. http://commons.apache.org/ Логирование http://habrahabr.ru/post/113145/ http://habrahabr.ru/post/130195/ Best Practices http://www.javapractices.com/home/HomeAction.do Очень рекомендую книжку Bitter Java Читайте JavaDoc на ВСЕ классы и методы, которые используете. Ну, и вот это тоже очень стоит изучать начинающим программистам http://www.amazon.com/The-Clean-Coder-Professional-Programmers/dp/0137081073 чтобы тупо сэкономить время и не изобретать подходы к написанию понятного кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 11:48 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
И ещё не бойтесь создавать классы и методы. Тут просто половина кода просится в отдельные методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 11:51 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
Не в обиду остальным завсегдатаям, но на ваш отзыв в первую очередь и рассчитывал :) Пару вопросов: 1. Код: java 1. Ну да. Насколько стало понятно из того материала, который гуглился просто в огромных кол-вах, так и предлагается делать: ждем соединения, принимаем, создаем отдельный поток и работаем с клиентом. 2. Код: java 1. Так предусмотрены же выходы по команде клиента и по приходе пустой строки. Ну и + exception и выход в случае, если истекает время ожидания подключения. Если я в чем то не прав, можно подробнее, ибо не понимаю, что тут не так. 3. Код: java 1. 2. Может я и туплю, только не пойму где. Если каждую итерацию цикла подключается клиент (client1 = s1.accept();), то после завершения "работы" с ним соединение разве не нужно закрывать ? Или так вообще делать не нужно ? Как тогда ? В целом спасибо за столь тщательный анализ)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 12:18 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
Код: java 1. М...а вот тут не понял...(Позвольте поинтересоваться в целях повышения квалификации :-) ) А Как надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 12:28 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
korshunНу да. Насколько стало понятно из того материала, который гуглился просто в огромных кол-вах, так и предлагается делать: ждем соединения, принимаем, создаем отдельный поток и работаем с клиентом. Ну, в качестве первой учебной итерации, наверное, нормально. Но далее, стоит перейти на пул потоков из j.u.c.Executors А затем и на NIO с селекторами. Проблемы здесь две. Создание и инициализация нового потока достаточно затратная операция по сравнению с переиспользованием потоков из пула. И чем больше клиентов, тем больше лишних ресурсов тратится на запуск нового потока и переключение контекста (хотя последнее в современных ОС и железках уже хорошо оптимизировали) Вторая проблема в количестве потоков. Чем больше сессий, тем больше потоков, чем больше потоков, тем "труднее" ОС между ними переключаться. korshun Код: java 1. Так предусмотрены же выходы по команде клиента и по приходе пустой строки. Ну и + exception и выход в случае, если истекает время ожидания подключения. Если я в чем то не прав, можно подробнее, ибо не понимаю, что тут не так. Это к вопросу о читаемости кода. Мы ввели читателя в заблуждение о том что цикл бесконечный, а потом расставили точек выхода - попробуй отыщи их все. Условия выхода "предусмотрены" где-то там, хрен знает где ниже по коду. При этом их несколько. А попробуй теперь к этому циклу добавить проверку перед выходом из цикла, при условии что у тебя много разных этих самых выходов. Количество выходов из цикла и метода лучше сводить к минимуму. korshun Код: java 1. 2. Может я и туплю, только не пойму где. Если каждую итерацию цикла подключается клиент (client1 = s1.accept();), то после завершения "работы" с ним соединение разве не нужно закрывать ? Или так вообще делать не нужно ? Как тогда ? Не понятно почему именно здесь мы закрываем соединение. И причина этому проста - у вас логика, протокол и работа с IO намешаны в одном методе. Протокол должен явно указать что это была последняя команда. Клиент после её получения должен штатно отвалиться и поэтому мы закрываем соединение. По вашему же коду, вот есть одна команда, вот другая, по одной мы закрываем клиента, по другой нет. А всё потому что бизнес-логика не описана отдельным кодом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 12:31 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
irbis_al Код: java 1. Я соврал. В JavaDoc такого нет. Зато есть в туториалах http://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html irbis_alМ...а вот тут не понял...(Позвольте поинтересоваться в целях повышения квалификации :-) ) А Как надо? Надо через Runnable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 12:36 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, все понятно и доступно, вопросов нет, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2015, 13:05 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
Господа, вернёмся к нашим баранам. Решил я продолжить эту затею с микросервисами. и практически выснил почему данные обратно не передаются если я для проверки возвращаю строку из java в oracle db, таким путём Код: java 1. 2. 3. 4. 5. 6. 7. то я ничего не получаю обраатно. пусто и всё тут, но если я делаю так Код: java 1. 2. 3. 4. 5. 6. 7. то получается ожидаемый результат. как мне решить эту диллему? как я понял, после чтения закрывается входящий поток и тогда становиться не активным исходящий что же это? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 16:49 |
|
||
|
Клиент-сервер, поругайте код сервера.
|
|||
|---|---|---|---|
|
#18+
ой, прошу прощения. не в ту тему) хотя может отчасти и в ту ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2017, 16:58 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38930265&tid=2122677]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 323ms |

| 0 / 0 |
