Ethernet_stm + W5500: максимальные параллельные соединения от того же клиента

Стивестронг
Чт, 05 января 2017 г., 19:54
У меня есть приложение веб -сервера, работающего на BP, прикрепила плату W5500 и SD -карту, бета SDFAT, заботясь о.
HTML -страница, запрашиваемая клиентом, имеет 4 встроенных изображения, сайт HTML загружается с SD -карты и отправляется на клиент.
Поскольку страница загружается (почти) полностью, запрашиваются утвержденные картинки.
Проблема: одна из изображений (случайным образом) не загружается, сетевой анализатор Google Chrome показывает мне статус: неудачный, err_connection_refused.
W5500_network.jpg
W5500_Network.JPG (80.37 киб) просмотрено 1306 раз

Squonk42
Чт, 05 января 2017 г., 21:00
Привет, Стив,

Просто предположение: Можете ли вы проверить, есть ли первый запрос на HTML-файл, есть поле «Подключение к подключению» в его заголовок? Если да, клиент, вероятно, не закрыл соединение после загрузки страницы и сохраняет одну розетку в W5500.

Стивестронг
Чт, 05 января 2017 г., 21:19
Хороший момент.
Но даже если это будет так, у него все равно должно быть много свободных гнезда до 8, разве это не должно?

Squonk42
Чт, 05 января 2017 г., 21:45
Это было просто предположение...

Вы работаете как клиент DHCP, может быть? Это также может съесть еще одну драгоценную розетку...

Я предлагаю вам сбросить статус каждого сокета (регистр SN_SR), чтобы выяснить, возникает ли эта проблема из-за оставшихся гнезда.

Squonk42
Чт, 05 января 2017 г., 22:02
Вот короткая функция сдача с дамп-all-w5500-registers: void WIZCHIP_DUMP(void) { int i, j; printf("\nCommon Register Block:\n"); for (i = MR; i <= VERSIONR; i += 256) { printf("%02x ", WIZCHIP_READ(i)); if ((i & 0xf00) == (15 * 256)) { printf("\n"); } } for (j = 0, j < 8, j++) { printf("\nSocket %d Register Block:\n", j); for (i = Sn_MR(j); i <= Sn_KPALVTR(j); i += 256) { printf("%02x ", WIZCHIP_READ(i)); if ((i & 0xf00) == (15 * 256)) { printf("\n"); } } printf("\n"); } }

Стивестронг
Чт, 05 января 2017 11:29
Ну, кажется, что весь доступ TCP проходит через одну розетку, все остальные бесплатны.
Так что нет недоступной проблемы с сокетом.

В настоящее время возможны только до 4 одновременных запросов за одну розетку... Это может быть ограничено оборудованием W5500?
Или мой чип W5500 "уставший"?

Rogerclark
Пт 06 января 2017 г. 3:06 утра
Современные браузеры делают всевозможные уловки, чтобы улучшить скорость загрузки и могут одновременно открывать множество соединений ;-(

Это не решение, но попробуйте другой браузер, я вспоминаю аналогичную проблему на ESP8266, где он будет работать нормально на Internet Explorer, но не работает правильно на хром. Как это может пролить свет на проблему.

Squonk42
Пт 06 января 2017 5:51
Стивестронг написал:Ну, кажется, что весь доступ TCP проходит через одну розетку, все остальные бесплатны.
Так что нет недоступной проблемы с сокетом.

В настоящее время возможны только до 4 одновременных запросов за одну розетку... Это может быть ограничено оборудованием W5500?
Или мой чип W5500 "уставший"?

Стивестронг
Пт 06 января 2017 10:15 утра
Я не думаю, что заголовок «Connection Live» проанализирован чипом W5500.
Мой сервер отвечает с «Connection Close», но все же, вы правы, соединение может быть в живых браузером.

Я попробовал с Firefox, лучше в том, что FF ждет до конца HTML Load и запрашивает утвержденные изображения только после этого. Означает, что в этот момент есть 4 доступных «трубопроводов» для запросов, так что все 4 изображения загружаются. Я должен попробовать HTML -страницу с 5 изображениями, чтобы увидеть, как ведет себя браузер.

В любом случае, мой сервер не может сделать многозадачность. Это означает, что только один запрос обслуживается за раз.
Но проблема заключается в выдаче (или принятии?) более 4 запросов одновременно. Кажется, это как -то ограничение.

Здесь снимок вывода журнала сервера: Current date and time: 17-01-06 11:17:05 ---> request from: 192.168.100.51 --- Socket status --- Socket 0 is ESTABLISHED, port: 80, D: 192.168.100.51(58222), RX: 420 Socket 1 is LISTEN, port: 80, D: 192.168.100.1(123), RX: 0 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 GET /web/index.htm HTTP/1.1 Checking request: web/index.htm ...processed in: 259 --- Socket status --- Socket 0 is ESTABLISHED, port: 80, D: 192.168.100.51(58222), RX: 0 Socket 1 is ESTABLISHED, port: 80, D: 192.168.100.51(58223), RX: 371 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 <--- client end. Current date and time: 17-01-06 11:17:05 ---> request from: 192.168.100.51 --- Socket status --- Socket 0 is LISTEN, port: 80, D: 192.168.100.51(58222), RX: 0 Socket 1 is ESTABLISHED, port: 80, D: 192.168.100.51(58223), RX: 371 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 GET /web/img/backgrnd.png HTTP/1.1 Checking request: web/img/backgrnd.png ...processed in: 596 --- Socket status --- Socket 0 is ESTABLISHED, port: 80, D: 192.168.100.51(58224), RX: 370 Socket 1 is ESTABLISHED, port: 80, D: 192.168.100.51(58223), RX: 0 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 <--- client end. Current date and time: 17-01-06 11:17:06 ---> request from: 192.168.100.51 --- Socket status --- Socket 0 is ESTABLISHED, port: 80, D: 192.168.100.51(58224), RX: 370 Socket 1 is LISTEN, port: 80, D: 192.168.100.51(58223), RX: 0 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 GET /web/img/pump-on.png HTTP/1.1 Checking request: web/img/pump-on.png ...processed in: 35 --- Socket status --- Socket 0 is ESTABLISHED, port: 80, D: 192.168.100.51(58224), RX: 0 Socket 1 is LISTEN, port: 80, D: 192.168.100.51(58223), RX: 0 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 <--- client end. Current date and time: 17-01-06 11:17:06 ---> request from: 192.168.100.51 --- Socket status --- Socket 0 is LISTEN, port: 80, D: 192.168.100.51(58224), RX: 0 Socket 1 is ESTABLISHED, port: 80, D: 192.168.100.51(58225), RX: 365 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 GET /web/img/ww.png HTTP/1.1 Checking request: web/img/ww.png ...processed in: 27 --- Socket status --- Socket 0 is LISTEN, port: 80, D: 192.168.100.51(58224), RX: 0 Socket 1 is ESTABLISHED, port: 80, D: 192.168.100.51(58225), RX: 0 Socket 2 is CLOSED, port: 80, D: 192.168.100.51(57950), RX: 0 Socket 3 is CLOSED, port: 80, D: 192.168.100.51(58096), RX: 0 <--- client end.

Ddrown
Пт, 06 января 2017 г. 16:35
--- Статус розетки ---
Сокет 0 установлен, порт: 80, D: 192.168.100.51 (58222), RX: 0
Сокет 1 установлен, порт: 80, D: 192.168.100.51 (58223), RX: 371
Сокет 2 закрыт, порт: 80, D: 192.168.100.51 (57950), RX: 0
Сокет 3 закрыт, порт: 80, D: 192.168.100.51 (58096), RX: 0
<--- Клиент конец.
После короткого просмотра кода Wiznet кажется, что их API сокета отличается от API сокета Unix одним важным способом: прослушивание не открыты после принятия соединения. Из приведенной выше вставки, похоже, вы бы не приняли другое соединение в порту 80, потому что ни один из ваших розеток не в состоянии прослушивания. Вероятно, это условие гонки между принятием соединения и библиотекой, называемой EthernetServer :: nevan (), чтобы открыть новую прослушивание.

Я думаю, что у меня дома есть щит Wiznet Ethernet, я должен экспериментировать с ним немного.

Стивестронг
Пт 06 января 2017 г. 16:52
Что ж, если это должно быть условием гонки, то это условие гонки должно быть постоянным, поскольку это происходит по каждой странице обновления 8-)

У меня нет обзора, что происходит, и когда розетки открываются, выслушаются и закрываются...
Вы имеете в виду, что должно быть больше гнезда для прослушивания, чтобы получить больше запросов?

Стивестронг
Пт, 6 января 2017 г., 18:02
Итак, я добавил еще одно изображение на страницу HTML, и это то, что делает Chrome:
W5500_chrome_1.jpg
W5500_CHROME_1.JPG (88.46 киб) просмотрено 341 раз

Rogerclark
Пт 06 января 2017 г. 20:22
Я думаю, ты подтвердил мой пост ;-)

USBERIAL и SERIAL TERMINAL