Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Cетевые протоколы и технологии

Cетевые протоколы и технологии TCP/IP стек

Ответ
 
Опции темы Опции просмотра
Старый 23.04.2013, 22:19   #1
valdemar
Junior Member
 
Регистрация: 23.04.2013
Возраст: 23
Сообщений: 23
Вес репутации: 100/18
valdemar will become famous soon enoughvaldemar will become famous soon enough
По умолчанию CustomHTTP вызов функции

Привет народ. Вообщем я понимаю, что спрошу глупость на все же. Купил демоборду скачал последний стек (там есть демо проект для нее). Открыл проект, скомпилировал и запустил. Все чудненько работает. Светодиод мигает, на страничке все отоброжается. Начал разбираться... Ну и вот не доходит до меня, как вызывается функция HTTPPrint_led(WORD num) , которая печатает TCPPut(sktHTTP, (num?'1':'0') статус светодиодов? В смысле я понимаю так, что бы функция что то сделала, ее нужно вызвать, так? Ну прошелся я поиском по всему проекту в надежде найти текст HTTPPrint_led - упоминается только один раз в CustomHTTPApp.c файле. Но это сама функция. Так кто же ее вызывает? Ставлю точку останова внутри ее - как и положено выполнение кода прерывается. Помогите начинающему. Спасибо.
valdemar вне форума   Ответить с цитированием
Старый 24.04.2013, 09:00   #2
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: CustomHTTP вызов функции

Цитата:
Сообщение от valdemar Посмотреть сообщение
Привет народ. Вообщем я понимаю, что спрошу глупость на все же. Купил демоборду скачал последний стек (там есть демо проект для нее). Открыл проект, скомпилировал и запустил. Все чудненько работает. Светодиод мигает, на страничке все отоброжается. Начал разбираться... Ну и вот не доходит до меня, как вызывается функция HTTPPrint_led(WORD num) , которая печатает TCPPut(sktHTTP, (num?'1':'0') статус светодиодов? В смысле я понимаю так, что бы функция что то сделала, ее нужно вызвать, так? Ну прошелся я поиском по всему проекту в надежде найти текст HTTPPrint_led - упоминается только один раз в CustomHTTPApp.c файле. Но это сама функция. Так кто же ее вызывает? Ставлю точку останова внутри ее - как и положено выполнение кода прерывается. Помогите начинающему. Спасибо.
в хттп2 вызываетя функция( или там макрос, не помню... ) которая приходится по свитчу в хттппринт.х в поисках динамических переменных хтмл, и оттуда вызываются эти функции с конкретными аргументами
__________________

Vanizma вне форума   Ответить с цитированием
Старый 24.04.2013, 10:12   #3
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: CustomHTTP вызов функции

Цитата:
Сообщение от valdemar Посмотреть сообщение
Привет народ. Вообщем я понимаю, что спрошу глупость на все же. Купил демоборду скачал последний стек (там есть демо проект для нее). Открыл проект, скомпилировал и запустил. Все чудненько работает. Светодиод мигает, на страничке все отоброжается. Начал разбираться... Ну и вот не доходит до меня, как вызывается функция HTTPPrint_led(WORD num) , которая печатает TCPPut(sktHTTP, (num?'1':'0') статус светодиодов? В смысле я понимаю так, что бы функция что то сделала, ее нужно вызвать, так? Ну прошелся я поиском по всему проекту в надежде найти текст HTTPPrint_led - упоминается только один раз в CustomHTTPApp.c файле. Но это сама функция. Так кто же ее вызывает? Ставлю точку останова внутри ее - как и положено выполнение кода прерывается. Помогите начинающему. Спасибо.

используй для поиска ctrl shift F
ampersant вне форума   Ответить с цитированием
Старый 24.04.2013, 17:43   #4
valdemar
Junior Member
 
Регистрация: 23.04.2013
Возраст: 23
Сообщений: 23
Вес репутации: 100/18
valdemar will become famous soon enoughvaldemar will become famous soon enough
По умолчанию Re: CustomHTTP вызов функции

Спасибо, нашел! Воспользовался Call Graph из MPLABX. Действительно в HTTPPrint.h есть функция, которая содержит свич. И которая принимая в качестве параметра номер-ID и вызывает стоответствующую фунцию. Я и предположить не мог что в хедере расположена полноценная функция в 75 строк. Обычно фунции в си файлах, поэтому в них и не искал. Еще раз спасибо. Буду рыть дальше - разбиратся как эти аргументы (номер-ID) попадают из js скрипта....
valdemar вне форума   Ответить с цитированием
Старый 24.04.2013, 18:24   #5
Vanizma
Senior Member
 
Аватар для Vanizma
 
Регистрация: 30.04.2008
Адрес: Pskov
Сообщений: 4,139
Вес репутации: 4300/119
Vanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond reputeVanizma has a reputation beyond repute
Отправить сообщение для Vanizma с помощью ICQ
По умолчанию Re: CustomHTTP вызов функции

Цитата:
Сообщение от valdemar Посмотреть сообщение
Спасибо, нашел! Воспользовался Call Graph из MPLABX. Действительно в HTTPPrint.h есть функция, которая содержит свич. И которая принимая в качестве параметра номер-ID и вызывает стоответствующую фунцию. Я и предположить не мог что в хедере расположена полноценная функция в 75 строк. Обычно фунции в си файлах, поэтому в них и не искал. Еще раз спасибо. Буду рыть дальше - разбиратся как эти аргументы (номер-ID) попадают из js скрипта....
75??? у меня наверное к 1000 уже приближается
а сделано так чтобы при конвертации веб страниц мпфс'ом править этот хедкр, а не исходник си
__________________

Vanizma вне форума   Ответить с цитированием
Старый 26.04.2013, 06:41   #6
valdemar
Junior Member
 
Регистрация: 23.04.2013
Возраст: 23
Сообщений: 23
Вес репутации: 100/18
valdemar will become famous soon enoughvaldemar will become famous soon enough
По умолчанию Re: CustomHTTP вызов функции

Доброго времени суток. Я тут снова со своими баранами. Подскажите пожалуйста, а то меня уже липкий пот и холодные конечности.
Стало быть имеем три светодиода led1, led2 и led3
Код HTML:
<p>LEDs:<br /><span class="leds"><font size="6">
  <a id="led0" onclick="newAJAXCommand('leds.cgi?led=0');">&bull;</a>
  <a id="led1" onclick="newAJAXCommand('leds.cgi?led=1');">&bull;</a>
  <a id="led2" onclick="newAJAXCommand('leds.cgi?led=2');">&bull;</a>
</font></span></p>
Для примера клик на led0 - вызываем функцию Ajax (с непонятной мне пока строчкой leds.cgi?led=0) Ведь функция определена так
Код HTML:
// Initiates a new AJAX command
// url: the url to access
//container:the document ID to fill, or a function to call with response XML 
//    repeat: true to repeat this call indefinitely (optional)
//    data: an URL encoded string to be submitted as POST data (optional)
function newAJAXCommand(url, container, repeat, data)
{...}
Здесь я вижу четыре аргумента, а мы передаем одну выше упомянутую строчку. И что это за файл leds.cdi с единственной строчкой Success! ~led(0)~ Похоже на динамическую переменную. Далее запрос на сервер. Попадаем в функцию HTTPPrint
Код HTML:
void HTTPPrint(DWORD callbackID)
{
    switch(callbackID)
    {
        case 0x00000000:
            HTTPPrint_Demoversion();
            break;
        case 0x00000001:
            HTTPPrint_ssid();
           ...
           ...
        case 0x00000005:
            HTTPPrint_led(0);
            break;
        case 0x00000006:
            HTTPPrint_nextSSID();
            break;
          ....
Почему case 5? откуда в callbackID эта пятерка? Мы же по led0 кликнули!
Я так понимаю что в файле status.xml описаны переменные, но там тоже никаких пятерок не видно.
PS Понимаю что многого не понимаю. Но ведь нужно же начать понимать, особенно если сильно хочется. Кто бы объяснил дилетанту, доступно на пальцах, как это все работает. Спасибо.
valdemar вне форума   Ответить с цитированием
Старый 26.04.2013, 07:17   #7
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 36
Сообщений: 1,385
Вес репутации: 1267/65
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: CustomHTTP вызов функции

Цитата:
Сообщение от valdemar Посмотреть сообщение
Доброго времени суток. Я тут снова со своими баранами. Подскажите пожалуйста, а то меня уже липкий пот и холодные конечности.
Стало быть имеем три светодиода led1, led2 и led3
Код HTML:
<p>LEDs:<br /><span class="leds"><font size="6">
  <a id="led0" onclick="newAJAXCommand('leds.cgi?led=0');">&bull;</a>
  <a id="led1" onclick="newAJAXCommand('leds.cgi?led=1');">&bull;</a>
  <a id="led2" onclick="newAJAXCommand('leds.cgi?led=2');">&bull;</a>
</font></span></p>
Для примера клик на led0 - вызываем функцию Ajax (с непонятной мне пока строчкой leds.cgi?led=0) Ведь функция определена так
Код HTML:
// Initiates a new AJAX command
// url: the url to access
//container:the document ID to fill, or a function to call with response XML 
//    repeat: true to repeat this call indefinitely (optional)
//    data: an URL encoded string to be submitted as POST data (optional)
function newAJAXCommand(url, container, repeat, data)
{...}
Здесь я вижу четыре аргумента, а мы передаем одну выше упомянутую строчку.
То что в функцию передается только url - непонятно почему так. Возможно где-то в Javascript есть и с одним параметром такая же функция. Но сама строчка обычный get-запрос, ведь Ajax работает по обычному принципу web обмена, единственная разница - браузер всю страницу не обновляет. В общем ищите где обрабатывается GET запрос на файл leds.cgi.
Цитата:
Сообщение от valdemar Посмотреть сообщение
И что это за файл leds.cdi с единственной строчкой Success! ~led(0)~ Похоже на динамическую переменную.
Похоже на какой-нибудь конфигуратор, типа разрешает читать Ajax только этот светодиод. Или ковертор состояния светодиода из дискретки в xml. Хотя раньше, когда не было PHP и прочих исполняемых вещей, только cgi и были. По идее - это исполняемый код. В общем, пробегите поиском по коду и посмотрите, где этот файл фигурирует. Это даст 90% ответов на Ваши вопросы. Хотя я бы лично, так громоздить точно бы не стал. (Это я про организацию web-сервера)
Цитата:
Сообщение от valdemar Посмотреть сообщение
Далее запрос на сервер. Попадаем в функцию HTTPPrint
Код HTML:
void HTTPPrint(DWORD callbackID)
{
    switch(callbackID)
    {
        case 0x00000000:
            HTTPPrint_Demoversion();
            break;
        case 0x00000001:
            HTTPPrint_ssid();
           ...
           ...
        case 0x00000005:
            HTTPPrint_led(0);
            break;
        case 0x00000006:
            HTTPPrint_nextSSID();
            break;
          ....
Почему case 5? откуда в callbackID эта пятерка? Мы же по led0 кликнули!
Я так понимаю что в файле status.xml описаны переменные, но там тоже никаких пятерок не видно.
PS Понимаю что многого не понимаю. Но ведь нужно же начать понимать, особенно если сильно хочется. Кто бы объяснил дилетанту, доступно на пальцах, как это все работает. Спасибо.
Ищите обработчик GET запроса файла leds.cgi - там все ваши разгадки.
в callbackID появляется пятерка, когда получив GET запрос от браузера, сервер начинает его разбирать и выснять, что, собственно, браузер хотел у него спросить.
Приведу пример из моего обработчика GET для статичного сайта. В смысле кол-во страниц их название заранее известно и определено.
Код:
#define MAX_LEN_PAGE 11
#define MAX_PAGE 5
const unsigned char Get[]={"GET"};
const char GetPar[]={"?"};
const char Page[MAX_PAGE][MAX_LEN_PAGE]={
"index.html",               // 0
"cfg.html",                   // 1
"style.css",               // 2
"logo.png",                   // 3
"script.js",                   // 4
};

// . . . . . 
// вот так я ищу запрашиваемую страницу
        for(j=0;j<MAX_PAGE;j++)
          {            // перебираем все доступные страницы
             if(strstr(p_begin,Page[j]))
                break;
          }
          if(j==MAX_PAGE) // ни одной поддерживаемой страницы не найдено?
          {                              // да ошибка 404
           Err_Request(ERR404,i);    
           return;
          }
          else
          {
             switch(j)
             {
              }
          }
Вот эта пятерка появляется скорее всего по такому же принципу, прогоняется в цикле все страницы или тупо поиском по файловой системе на существование запрашиваемого файла. мой switch(j) и Ваш
switch(callbackID) - это уже одно и тоже, практически.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 26.04.2013, 12:41   #8
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: CustomHTTP вызов функции

Цитата:
Сообщение от 2AplusA Посмотреть сообщение
непонятно почему так. Возможно где-то

Похоже типа Или По идее В общем,


скорее всего одно и тоже, практически.
Ты чего это?

Цитата:
Сообщение от valdemar Посмотреть сообщение
Доброго времени суток. Я тут снова со своими баранами. Подскажите пожалуйста, а то меня уже липкий пот и холодные конечности.
Стало быть имеем три светодиода led1, led2 и led3
Код HTML:
<p>LEDs:<br /><span class="leds"><font size="6">
  <a id="led0" onclick="newAJAXCommand('leds.cgi?led=0');">&bull;</a>
  <a id="led1" onclick="newAJAXCommand('leds.cgi?led=1');">&bull;</a>
  <a id="led2" onclick="newAJAXCommand('leds.cgi?led=2');">&bull;</a>
</font></span></p>
Для примера клик на led0 - вызываем функцию Ajax (с непонятной мне пока строчкой leds.cgi?led=0) Ведь функция определена так
Код HTML:
// Initiates a new AJAX command
// url: the url to access
//container:the document ID to fill, or a function to call with response XML 
//    repeat: true to repeat this call indefinitely (optional)
//    data: an URL encoded string to be submitted as POST data (optional)
function newAJAXCommand(url, container, repeat, data)
{...}
Здесь я вижу четыре аргумента, а мы передаем одну выше упомянутую строчку. И что это за файл leds.cdi с единственной строчкой Success! ~led(0)~ Похоже на динамическую переменную. Далее запрос на сервер. Попадаем в функцию HTTPPrint
Код HTML:
void HTTPPrint(DWORD callbackID)
{
    switch(callbackID)
    {
        case 0x00000000:
            HTTPPrint_Demoversion();
            break;
        case 0x00000001:
            HTTPPrint_ssid();
           ...
           ...
        case 0x00000005:
            HTTPPrint_led(0);
            break;
        case 0x00000006:
            HTTPPrint_nextSSID();
            break;
          ....
Почему case 5? откуда в callbackID эта пятерка? Мы же по led0 кликнули!
Я так понимаю что в файле status.xml описаны переменные, но там тоже никаких пятерок не видно.
PS Понимаю что многого не понимаю. Но ведь нужно же начать понимать, особенно если сильно хочется. Кто бы объяснил дилетанту, доступно на пальцах, как это все работает. Спасибо.

Эти цифры создает утилита MPFS2.exe которая каждую переменную-функцию, оформленную в html как ~var~ в веб страничке, это место заменяется id, добравшись до которой файловая система получает этот id - номерок с которым потом заходит в этот монстроидный switch.
Заодно утилита формирует хедерок с названиями функций HTTPPrint_var(?). Юзеру остается только написать собственно эти функции.

Т.е. запрошен html, либа находит этот файл, начинает его отдавать. Добравшись до очередного id делает зигзаг чтобы напечатать что-то динамически созданное в функции HTTPPrint_var. Если место в буфере TCP не хватило, то временно все это покидается до следующего витка РТОС. Потом опять делается проверка что есть место в буфере - выдается очередная порция чего надо напечатать. Все выдали, теперь возвращаемся обратно к выдаче файла HTML, до очередной метки id.
Нумерация вагонов с головы поезда, но для этих целей также служит .idx файл, в котором все имена переменных и их номера. Т.е. можно начать и не с 0. Но если этот файл удалить, то нумерация произойдет с самого начала. А то пока чтото делаешь, можно навставлять переменных, потом удалить, а номерок то в idx останется занятым. Т.е. периодически стоит почистить этот файл. Если функция требуется из разных мест web, то функция будет только одна с одним номером id.

Зато если это таблица некая и переменные нужно выдавать как функции от переменной (или переменных), тогда функция будет все таки одна в хедере, зато со всеми разными аргументами в switch попадают все до единой раздельно.

Для таких случаев можно динамически строить вообще всю таблицу (т.е. прямо из HTTPPrint строить целиком со всеми тегами), так меньше case -ов получится. Можно поварьировать. Таблицы вообще предпочитаю через AJAX заполнять, т.е. через xml выдается номер строки и через разделители что насыпать в клетки, либо строка столбец потом что - вариантов тыщщи.
ampersant вне форума   Ответить с цитированием
Старый 26.04.2013, 12:53   #9
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 36
Сообщений: 1,385
Вес репутации: 1267/65
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: CustomHTTP вызов функции

Цитата:
Сообщение от ampersant Посмотреть сообщение
Ты чего это?
Не работал я с этой библиотекой никогда. Поэтому утрвеждать не могу, могу лишь предполагать, т.к. смысл понятен чего автор сделать пытается.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 26.04.2013, 15:47   #10
valdemar
Junior Member
 
Регистрация: 23.04.2013
Возраст: 23
Сообщений: 23
Вес репутации: 100/18
valdemar will become famous soon enoughvaldemar will become famous soon enough
По умолчанию Re: CustomHTTP вызов функции

Спасибо. Теперь начинаю потихоньку понимать, а то начал сомневаться, не слабоумный ли я? Про таблицу не совсем понял, но с номерами в case разобрался. Я правда вместо MPFS2.exe запускаю Convert WebPages to MPFS.bat , который в папке с проектом лежит (так в мануале написано для этой демоборды). Но добавив свою переменную и запустив его, увидел в switch новый, только что созданный case. Остается только добавить в CustomHTTP обработчик. Будем рыть дальше. Еще раз спасибо.
valdemar вне форума   Ответить с цитированием
Старый 28.04.2013, 18:42   #11
valdemar
Junior Member
 
Регистрация: 23.04.2013
Возраст: 23
Сообщений: 23
Вес репутации: 100/18
valdemar will become famous soon enoughvaldemar will become famous soon enough
По умолчанию Re: CustomHTTP вызов функции

Я так понимаю вот эта функция,
Код:
// Call ourselves again in 10ms
    setTimeout("pollAJAX()",10);
из MCHP.js файла вызывается каждые 10 милисекунд, запрашивая у сервера новые данные. Это ж трафик то какой в сети, если этих данных достаточно много. Можно конечно не так часто аякс дергать, скажем раз в секунду, или минуту. А если запрашиваемые данные, значение переменной к примеру, меняется достаточно редко (раз в час или сутки например) но ее изменение нужно зафиксировать как можно быстрее... Собственно вопрос: Есть ли какой механизм, который позволяет проинформировать клиента (веб страницу, типа пора обновлятся) сервером без запроса со стороны клиента - мол эй мужик у меня тут э... датчик пожарный сработал, а ты там спишь в шапку (глупый пример - согласен). И чтобы не пропустить это событие, для этого придется посылать запросы достаточно часто, создавая в сети бесполезный трафик.
И еще спрошу, думаю может это как раз таки связано с частыми запросами. Ради эксперемента вывел на страничку значения тика с контроллера
Код:
...
case 0x00000015:
            HTTPPrint_tik();
            break;
...
сама функция
Код:
void HTTPPrint_tik()
    {
     // Сколько там натикало с момента старта
    DWORD mytik =TickGet();
    char buff[32];
    sprintf( buff, "%d",  mytik );
    TCPPutROMString(sktHTTP, buff);
    return;
    }
Весело замелькали циферки на страничке, но через минут 10 пропала связь с демобордой. Причем связаться повторно не получается, только через сброс пика.
Увеличил время между запросами с 10ms до 100ms, нормально работало минут 40. Вот я и подумал, может аякс запросы пихаюся в какую то очередь, размер буфера которой ограничен и при переполнении происходит сбой. Хотя может причина и в другом
valdemar вне форума   Ответить с цитированием
Старый 28.04.2013, 18:46   #12
valdemar
Junior Member
 
Регистрация: 23.04.2013
Возраст: 23
Сообщений: 23
Вес репутации: 100/18
valdemar will become famous soon enoughvaldemar will become famous soon enough
По умолчанию Re: CustomHTTP вызов функции

Я так понимаю вот эта функция,
Код:
// Call ourselves again in 10ms
    setTimeout("pollAJAX()",10);
из MCHP.js файла вызывается каждые 10 милисекунд, запрашивая у сервера новые данные. Это ж трафик то какой в сети, если этих данных достаточно много.... Можно конечно не так часто аякс дергать, скажем раз в секунду, или минуту. А если запрашиваемые данные, значение переменной к примеру, меняется достаточно редко (раз в час или сутки например) но ее изменение нужно зафиксировать как можно быстрее... Собственно вопрос: Есть ли какой механизм, который позволяет проинформировать клиента (веб страницу, типа пора обновлятся) сервером без запроса со стороны клиента - мол эй мужик у меня тут э... датчик пожарный сработал, а ты там спишь в шапку (глупый пример - согласен). И чтобы не пропустить это событие, для этого придется посылать запросы достаточно часто, создавая в сети бесполезный трафик.
И еще спрошу, думаю может это как раз таки связано с частыми запросами. Ради эксперемента вывел на страничку значения тика с контроллера
Код:
...
case 0x00000015:
            HTTPPrint_tik();
            break;
...
сама функция
Код:
void HTTPPrint_tik()
    {
     // Сколько там натикало с момента старта
    DWORD mytik =TickGet();
    char buff[32];
    sprintf( buff, "%d",  mytik );
    TCPPutROMString(sktHTTP, buff);
    return;
    }
Весело замелькали циферки на страничке, но минут через 10 пропала связь с демобордой. Причем связаться повторно не получается, только через сброс пика.
Увеличил время между запросами с 10ms до 100ms, нормально работало минут 40. Вот я и подумал, может аякс запросы пихаюся в какуюто очередь, размер буфера которой ограничен и при переполнении происходит сбой. Хотя может причина и в другом
valdemar вне форума   Ответить с цитированием
Старый 30.04.2013, 03:07   #13
valdemar
Junior Member
 
Регистрация: 23.04.2013
Возраст: 23
Сообщений: 23
Вес репутации: 100/18
valdemar will become famous soon enoughvaldemar will become famous soon enough
По умолчанию Re: CustomHTTP вызов функции

Я так понимаю вот эта функция,
Код:
// Call ourselves again in 10ms
    setTimeout("pollAJAX()",10);
из MCHP.js файла вызывается каждые 10 милисекунд, запрашивая у сервера новые данные. Это ж трафик то какой в сети, если этих данных достаточно много.... Можно конечно не так часто аякс дергать, скажем раз в секунду, или минуту. А если запрашиваемые данные, значение переменной к примеру, меняется достаточно редко (раз в час или сутки например) но ее изменение нужно зафиксировать как можно быстрее... Собственно вопрос: Есть ли какой механизм, который позволяет проинформировать клиента (веб страницу, типа пора обновлятся) сервером без запроса со стороны клиента - мол эй мужик у меня тут э... датчик пожарный сработал, а ты там спишь в шапку (глупый пример - согласен)? И чтобы не пропустить это событие, для этого придется посылать запросы достаточно часто, создавая в сети бесполезный трафик.
И еще спрошу, думаю может это как раз таки связано с частыми запросами. Ради эксперемента вывел на страничку значения тика с контроллера
Код:
...
case 0x00000015:
            HTTPPrint_tik();
            break;
...
сама функция
Код:
void HTTPPrint_tik()
    {
     // Сколько там натикало с момента старта
    DWORD mytik =TickGet();
    char buff[32];
    sprintf( buff, "%d",  mytik );
    TCPPutROMString(sktHTTP, buff);
    return;
    }
Весело замелькали циферки на страничке, но минут через 10 пропала связь с демобордой. Причем связаться повторно не получается, только через сброс пика.
Увеличил время между запросами с 10ms до 100ms, нормально работало минут 40. Вот я и подумал, может аякс запросы пихаюся в какую то очередь, размер буфера которой ограничен и при переполнении происходит сбой. Хотя может причина и в другом
valdemar вне форума   Ответить с цитированием
Старый 10.05.2013, 20:57   #14
ampersant
Senior Member
 
Аватар для ampersant
 
Регистрация: 26.02.2008
Адрес: IgorV
Сообщений: 2,299
Вес репутации: 4442/102
ampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond reputeampersant has a reputation beyond repute
По умолчанию Re: CustomHTTP вызов функции

Цитата:
Сообщение от valdemar Посмотреть сообщение
Я так понимаю вот эта функция,
Код:
// Call ourselves again in 10ms
    setTimeout("pollAJAX()",10);
из MCHP.js файла вызывается каждые 10 милисекунд, запрашивая у сервера новые данные. Это ж трафик то какой в сети, если этих данных достаточно много.... Можно конечно не так часто аякс дергать, скажем раз в секунду, или минуту. А если запрашиваемые данные, значение переменной к примеру, меняется достаточно редко (раз в час или сутки например) но ее изменение нужно зафиксировать как можно быстрее... Собственно вопрос: Есть ли какой механизм, который позволяет проинформировать клиента (веб страницу, типа пора обновлятся) сервером без запроса со стороны клиента - мол эй мужик у меня тут э... датчик пожарный сработал, а ты там спишь в шапку (глупый пример - согласен)? И чтобы не пропустить это событие, для этого придется посылать запросы достаточно часто, создавая в сети бесполезный трафик.
И еще спрошу, думаю может это как раз таки связано с частыми запросами. Ради эксперемента вывел на страничку значения тика с контроллера
Код:
...
case 0x00000015:
            HTTPPrint_tik();
            break;
...
сама функция
Код:
void HTTPPrint_tik()
    {
     // Сколько там натикало с момента старта
    DWORD mytik =TickGet();
    char buff[32];
    sprintf( buff, "%d",  mytik );
    TCPPutROMString(sktHTTP, buff);
    return;
    }
Весело замелькали циферки на страничке, но минут через 10 пропала связь с демобордой. Причем связаться повторно не получается, только через сброс пика.
Увеличил время между запросами с 10ms до 100ms, нормально работало минут 40. Вот я и подумал, может аякс запросы пихаюся в какую то очередь, размер буфера которой ограничен и при переполнении происходит сбой. Хотя может причина и в другом
трафик не большой конечно по современным меркам. Но 10 и даже 100мс это через чур. Это тока для локальной сети сканает. Для жпрсы уже не стоит так часто. Попробуй в скриптах разобраться с целью учащения повторов после клика, и после обновления переход на редкие обновления типа 1 раз в сек.
А потом перейдешь к написанию софта под комп, который бы сам принимал эти обновления и рисовал бы сугубо на своем интерфейсе то что нужно, а потом дойдет, что надо слать только если чтото случилось (изменилось) и только изредка проверять наличие связи...
Так и перейдешь к SNMP наверное со своим софтом под комп. там уже придуманы трапы и всё такое. И вот гдето тут задумаешься что может быть тут стоит применить нечто более близкое к компам... Какие нибудь промкомпы.
Этот порядок развития по спирали не претендует на последнюю истину, но как то так если не бросишь.
ampersant вне форума   Ответить с цитированием
Старый 20.05.2013, 14:33   #15
henx
Senior Member
 
Регистрация: 01.03.2007
Адрес: Ульяновск
Сообщений: 119
Вес репутации: 154/42
henx has a spectacular aura abouthenx has a spectacular aura about
По умолчанию Re: CustomHTTP вызов функции

Я так думаю, что функция pollAJAX() лишь проверяет, пришел ли ответ, считает таймаут, а запрос xml запускается командой
Код:
setTimeout(function(){newAJAXCommand('status.xml', updateStatus, true)},500);
henx вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает PIC16F876A-I/SP Ибрагим Николаевич Вопросы начинающих 6 22.07.2011 17:28
Объединение указателей функций в качестве параметра функции maxNTF Вопросы начинающих 14 22.10.2010 14:09
вызов функции побитно, как организовать? Gera82 Продукция MICROCHIP 16 04.12.2009 06:27
Вызов функции по указателю в MPLAB C30 vveshikov Продукция MICROCHIP 5 05.08.2009 12:46
Вызов функции через указатель структуры petrd Вопросы начинающих 20 06.01.2009 01:47


Часовой пояс GMT +3, время: 20:29.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot