Arduino Mega Server
Модератор: Alex
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Мы попадаем на полноценный сайт, и таких сайтов может быть сотни для каждого чайника и каждого цветка (при желании).
Автоматическое управление это само-собой (это обычный микроконтроллер).
Ложка дёгтя в этой бочке мёда заключается в том, что настраивать всё под себя вам придётся самому, а для этого нужно много знать и понимать. Пока это не для всех, в будущем, возможно появятся стандартные конфигурации или сервисы по разработке решений на заказ.
Автоматическое управление это само-собой (это обычный микроконтроллер).
Ложка дёгтя в этой бочке мёда заключается в том, что настраивать всё под себя вам придётся самому, а для этого нужно много знать и понимать. Пока это не для всех, в будущем, возможно появятся стандартные конфигурации или сервисы по разработке решений на заказ.
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Насколько я понял, они сделали примерно то же, что и я. Только немного не доделали. Так?Нашёл обсуждение проблемы на итальянском: ссылка.
Сейчас интересно в чём причина оставшейся 3-х секундной задержки. В общем всё работает, но как-то неаккуратненько.
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Arduino Mega Server
Alex, прочитал статью на geektimes. Не могу поддержать обсуждение там, т.к. не зарегистрирован, но вынужден согласиться с mifki.
Проблема не в библиотеке Ethernet, а в ограничении самого чипа W5100. Если заглянуть в его даташит
(https://www.sparkfun.com/datasheets/Dev ... v1_1_8.pdf), то там написано: Supports 4 independent sockets simultaneously . Это согласуется со значением MAX_SOCK_NUM. А вот современные браузеры, пытаются качать все сразу в большем к-ве потоков (Chrome, кажется, в 6 потоков, а Firefox во все 15).
Соответсвенно, некоторые потоки получают отказ в подключении. Но в TCP есть такая замечательная вещь, как TCP retransmission. Это попытка повторной отправки пакета через определенный таймаут. Вот отсюда мы получаем задержку в 3 сек - это Default Retransmission Timeout в Windows (см. напр. https://msdn.microsoft.com/en-us/librar ... 2147217396).
Т.е. что получется: 4 потока занимают 4 сокета, а 5-й и 6-й получают отказ и ждут 3 сек. Через 3 сек. они могут получить сокет, а может уже кто-то другой более шустрый все занял - тогда опять ждать 3 сек.
Вот как-то так )
Проблема не в библиотеке Ethernet, а в ограничении самого чипа W5100. Если заглянуть в его даташит
(https://www.sparkfun.com/datasheets/Dev ... v1_1_8.pdf), то там написано: Supports 4 independent sockets simultaneously . Это согласуется со значением MAX_SOCK_NUM. А вот современные браузеры, пытаются качать все сразу в большем к-ве потоков (Chrome, кажется, в 6 потоков, а Firefox во все 15).
Соответсвенно, некоторые потоки получают отказ в подключении. Но в TCP есть такая замечательная вещь, как TCP retransmission. Это попытка повторной отправки пакета через определенный таймаут. Вот отсюда мы получаем задержку в 3 сек - это Default Retransmission Timeout в Windows (см. напр. https://msdn.microsoft.com/en-us/librar ... 2147217396).
Т.е. что получется: 4 потока занимают 4 сокета, а 5-й и 6-й получают отказ и ждут 3 сек. Через 3 сек. они могут получить сокет, а может уже кто-то другой более шустрый все занял - тогда опять ждать 3 сек.
Вот как-то так )
- Рейтинг: 1.16%
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Не всё так просто. На диаграммах видно, что есть куча отработанных и ничем не занятых сокетов.Т.е. что получется: 4 потока занимают 4 сокета, а 5-й и 6-й получают отказ и ждут 3 сек.
Идея с TCP retransmission интересна, по крайней мере хоть какое-то объяснение 3-х секунд.
Кто нибудь может по шагам описать, что происходит с момента посылки запроса браузера до начала зелёной линии ответа сервера?
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
Можно попробовать сниффер. По идее его нужно было с самого начала как инструмент использовать. Там, возможно, будет более полная информация о пакетах и отказах. Нужно на торрентах найти самый продвинутый сниффер и понаблюдать за обменом данными. Браузерная диаграмма загрузки - это так, для поверхностной оценки.Кто нибудь может по шагам описать, что происходит с момента посылки запроса браузера до начала зелёной линии ответа сервера?
Вы без сниффера разбор заголовков делали?
Россия навсегда!
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
В своей работе я использовал инструменты разработчика, встроенные в браузер.
Проблема в том, что я понимаю механизм взаимодействия процентов на 90%. И я уверен, что для решения проблемы достаточно 3-х вещей:
1. Чёткое понимание механизма взаимодействия (достаточно теории).
2. Исходные файлы библиотеки (есть в наличии)
3. Диаграммы отражающие временные зависимости.
Из этого пазла мне не хватает только чёткого понимания теории (10%). В частности, что конкретно происходит в начале и конце длинной линии. В чём причина того, что висящий запрос вдруг поступает в обработку. Что является триггером и что блокирует обработку.
Сейчас у меня 2 предположения, это незакрывающиеся сокеты и проблемы с работой кеша W5100.
Проблема в том, что я понимаю механизм взаимодействия процентов на 90%. И я уверен, что для решения проблемы достаточно 3-х вещей:
1. Чёткое понимание механизма взаимодействия (достаточно теории).
2. Исходные файлы библиотеки (есть в наличии)
3. Диаграммы отражающие временные зависимости.
Из этого пазла мне не хватает только чёткого понимания теории (10%). В частности, что конкретно происходит в начале и конце длинной линии. В чём причина того, что висящий запрос вдруг поступает в обработку. Что является триггером и что блокирует обработку.
Сейчас у меня 2 предположения, это незакрывающиеся сокеты и проблемы с работой кеша W5100.
- uni
- Сообщения: 191
- Зарегистрирован: Вс июл 26, 2015 9:21 pm
- Откуда: Екатеринбург
- Благодарил (а): 4 раза
- Поблагодарили: 7 раз
- Контактная информация:
Re: Arduino Mega Server
И это прочли и поняли: Веб-сервер за 5 минут на базе PIC и W5100 ? Можно обратиться к автору этой статьи, думаю, он сможет что-нибудь подсказать.
Ещё статья с хабра: Подключаем новенький чип от WIZnet: W5500. IP для маленьких вещей. Часть 1 . Можно попробовать обратиться и к этому автору.
Ещё статья с хабра: Подключаем новенький чип от WIZnet: W5500. IP для маленьких вещей. Часть 1 . Можно попробовать обратиться и к этому автору.
Россия навсегда!
-
- Сообщения: 2357
- Зарегистрирован: Пт апр 20, 2012 12:53 pm
- Благодарил (а): 42 раза
- Поблагодарили: 262 раза
Re: Arduino Mega Server
Да, я это прочитал. Что-то понял, что-то — нет и это не удивительно потому, что статья тянет на докторскую диссертацию. И даже вопрос уже задал, но коллега PEACE_dez... ничего не ответил. О причине подобного я могу только догадываться. Моё предположение, что ответа у него нет.
Вторую статью сейчас почитаю.
Вторую статью сейчас почитаю.
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Arduino Mega Server
Диаграммы вы строите со стороны браузера, а я говорю о сокетах со стороны W5100.Alex писал(а):Не всё так просто. На диаграммах видно, что есть куча отработанных и ничем не занятых сокетов.Т.е. что получется: 4 потока занимают 4 сокета, а 5-й и 6-й получают отказ и ждут 3 сек.
Идея с TCP retransmission интересна, по крайней мере хоть какое-то объяснение 3-х секунд.
Кто нибудь может по шагам описать, что происходит с момента посылки запроса браузера до начала зелёной линии ответа сервера?
Для проверки я создал тестовую страничку, которая заставляет браузер поднять ровно 5 коннектов. на Arduino я использовал оригинальные либы. Диаграмма из Хрома во вложении.
А вот дамп сниффера пятого подключения (test4.html)
Код: Выделить всё
No. Time Source Destination Protocol Length Info
19 2015-08-08 09:59:19.921557000 192.168.1.1 192.168.1.210 TCP 66 62009→80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
21 2015-08-08 09:59:19.922136000 192.168.1.210 192.168.1.1 TCP 60 80→62009 [RST] Seq=1 Win=0 Len=0
105 2015-08-08 09:59:22.920998000 192.168.1.1 192.168.1.210 TCP 66 [TCP Retransmission] 62009→80 [SYN] Seq=0 Win=8192 Len=0 MSS=1460 WS=4 SACK_PERM=1
108 2015-08-08 09:59:22.921868000 192.168.1.210 192.168.1.1 TCP 60 80→62009 [SYN, ACK] Seq=2183659801 Ack=1 Win=2048 Len=0 MSS=1460
110 2015-08-08 09:59:22.922013000 192.168.1.1 192.168.1.210 TCP 54 62009→80 [ACK] Seq=1 Ack=2183659802 Win=64240 Len=0
113 2015-08-08 09:59:22.922992000 192.168.1.1 192.168.1.210 HTTP 534 GET /test4.html HTTP/1.1
114 2015-08-08 09:59:23.065453000 192.168.1.210 192.168.1.1 TCP 86 [TCP segment of a reassembled PDU]
115 2015-08-08 09:59:23.065546000 192.168.1.1 192.168.1.210 TCP 54 62009→80 [ACK] Seq=481 Ack=2183659834 Win=64208 Len=0
116 2015-08-08 09:59:23.067075000 192.168.1.210 192.168.1.1 TCP 86 [TCP segment of a reassembled PDU]
117 2015-08-08 09:59:23.067075000 192.168.1.210 192.168.1.1 TCP 75 [TCP segment of a reassembled PDU]
118 2015-08-08 09:59:23.067150000 192.168.1.1 192.168.1.210 TCP 54 62009→80 [ACK] Seq=481 Ack=2183659887 Win=64155 Len=0
119 2015-08-08 09:59:23.067918000 192.168.1.210 192.168.1.1 TCP 63 [TCP segment of a reassembled PDU]
...
- браузер запрашивает подключение [SYN]
- получает отказ, т.к. нет свободных сокетов [RST]
- ждет Retransmission Timeout
- перепосылает [SYN]
- успешно подключается и получает ответ
- Вложения
-
- pic1.png (55.44 КБ) 12691 просмотр
- Рейтинг: 1.16%
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Arduino Mega Server
Что можно предложить? Мне приходит в голову пока только одно - оптимизация сайта (AMS) под 4 сокета:
1. В конечной версии нужно слепить все файлы по типам: все *.css объединить в один файл и все *.js
Так браузер будет грузить в 3-х соединениях: страничку, css и js, а 4-ый оставим ему на favicon
2. Убрать со странички явно вставленные <img> и грузить их из Javascript по AJAX уже после загрузки документа, НО ограничиваясь 4-мя одновременными загрузками.
1. В конечной версии нужно слепить все файлы по типам: все *.css объединить в один файл и все *.js
Так браузер будет грузить в 3-х соединениях: страничку, css и js, а 4-ый оставим ему на favicon
2. Убрать со странички явно вставленные <img> и грузить их из Javascript по AJAX уже после загрузки документа, НО ограничиваясь 4-мя одновременными загрузками.