Веб-розетки на плате Stellaris, работающей по протоколу lwIP 1.3.2
Что я делаю
Я внедряю сервер веб-сокетов на плате Stellaris, как следует из названия. На данный момент я могу установить соединение с клиентом и отправить несколько кадров.
То, как я реализую веб-сокет
То, как я развиваю это, похоже на общение с подчиненным. Всякий раз, когда клиент отправляет строку, сервер декодирует ее и затем отвечает. На данный момент я просто отвечаю на символ "е", который призван быть просто счетчиком. Дело в том, что я реализовал веб-сокет на стороне клиента для отправки "е" всякий раз, когда он получает сообщение, а затем отображает сообщение на странице.
Эта проблема
Проблема в том, что он выполняет около 15 транзакций, и затем я вижу, что сообщение повторно передается с и на плату Stellaris, а затем сообщение закрывается. После того, как соединение закрывается, я заметил, что не могу получить доступ ни к какой другой странице на доске. Он просто больше не отвечает.
Мои предположения о том, что может быть причиной этого
Это привело меня к мысли, что транзакции выполняются слишком быстро, и может быть ошибка реализации, ошибка lwIP или аппаратная ошибка (в качестве основы я использую пример enet_io).
Мои предположения о том, как это исправить
Увидев это, я могу себе представить, что мне нужно контролировать строку, отправляемую в микроконтроллер, чтобы она отправляла раз в секунду, а может и меньше, потому что в данный момент она выполняла что-то вроде 1000 транзакций в секунду, а иногда и больше.
Вопрос
Итак... после моих испытаний у меня все еще есть несколько вопросов, на которые нужно ответить. Нужны ли веб-сокеты такого рода отношения? Где клиент спрашивает, а сервер обслуживает? Или я могу просто передавать данные с сервера на клиент, пока соединение открыто? Мое предположение, что замедление моих ставок будет работать?
1 ответ
Нужны ли веб-сокеты такого рода отношения [запрос-ответ]? Где клиент спрашивает, а сервер обслуживает? Или я могу просто передавать данные с сервера на клиент, пока соединение открыто?
Протокол Websocket не требует модели запрос-ответ (за исключением установления соединения при установлении соединения).
Сервер может передавать данные клиенту, не беспокоясь о каких-либо ответах или запросах от клиента.
Тем не менее, это обычная практика, чтобы получить ответ или ping
от клиента время от времени, просто чтобы знать, что они живы.
Это позволяет клиенту возобновить соединение, если сообщение или ping
не удается связаться с сервером - в противном случае клиент может не заметить ненормально разорванное соединение (он будет просто предполагать, что обновления не отправляются, потому что нет новых данных).
Это также позволяет серверу знать, что соединение все еще живо, даже когда информация не обменивается.
Мое предположение, что замедление моих ставок будет работать?
Я думаю, что этот вопрос становится менее актуальным из-за ответа на первый вопрос... однако, я, вероятно, должен отметить, что клиент веб-сокета (часто браузер) будет иметь ограниченные ресурсы и другую схему управления памятью.
Браузеры легко перегружать слишком большим количеством данных, потому что они часто сохраняют ссылки на все обмены, так как страница была загружена (или обновлена).
Это особенно актуально при регистрации событий в консоли браузера.