| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Комуникация през TCP сокети http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=9446 |
Страница 1 от 1 |
| Автор: | MidNighT_SpiRiT [ Чет Окт 20, 2011 4:38 pm ] |
| Заглавие: | Комуникация през TCP сокети |
Колеги, налага ми се да организирам комуникация между компютър (сървър) и едно устройство с линукс. До сега нещата ставаха с предаване на XML текст през сокета, но се оказа, че устройството не е достатъчно бързо да обработва всичките щуротий и сега трябва да ползвам нещо "просто" - да организирам някакви рамки (пакети) и полета в тях, за да предам командите с данните. Мастер-а е сървъра, а устройството - подчинения. Някой има ли опит с такъв обмен? Трябва ми нещо, което е проверено, че работи - в смисъл като организация и справяне с евентуални грешки. |
|
| Автор: | michev [ Чет Окт 20, 2011 8:28 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Хич не се разбира какво искаш. XML парсера ли ти се бави или нещо друго? Каква "рамка" очакваш? С един XML можеш да опишеш много неща и не вярвам да има някой дето да ти отговори твърдо и решително - "ей тъй става..". Справяне с грешки? TCP-то не ти ли стига? До сега като си карал на XML кой се е справял с грешките? Направи си един тест м/у XML и JSON парсер на лункското у-во и виж дали няма да е по - бързо и да те удволетвори. Все пак с JSON-а можеш да опишеш най различни структури от данни. |
|
| Автор: | miro_atc [ Чет Окт 20, 2011 9:20 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Какво е това устройство дето търкаля линукс, а на XML се бави? Има нещо гнило тука... освен XML-а да е голям (мегабайти?), ама то ако данните са много обработката винаги ще е бавна. Ние работим с XML-и, но нямаме проблем със скоростта, въпреки че хардуерът е доста слаб. По-скоро проблем ни е паметта и заради това трябваше да си правим сами парсването и валидирането без да ползваме рекурсивни алгоритми... |
|
| Автор: | Реконструктор [ Чет Окт 20, 2011 11:35 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Пробвай с http://en.wikipedia.org/wiki/Binary_XML или някой друг двоичен йерархичен стандарт. Щото явно ти трябва йерархия. Ако не ти трябва - въпроса е излишен. |
|
| Автор: | MidNighT_SpiRiT [ Пет Окт 21, 2011 11:11 am ] |
| Заглавие: | Re: Комуникация през TCP сокети |
За кратки съобщения няма проблеми, но в случая се предават артикули с разни атрибути(име, цена и др.), които са много - примерно при 8000 артикула един по един и чакане на отговор дали е записан в базата данни на устройството. Всичкото отнема от порядъка на 20 минути и повече. Използвам Qt. За един артикул времето е около 100ms само обработката на XML-a. |
|
| Автор: | miro_atc [ Пет Окт 21, 2011 12:48 pm ] | |||||||||
| Заглавие: | Re: Комуникация през TCP сокети | |||||||||
значи пращаш по един XML за всеки артикул? В такъв случай 100ms е страшно много време, нещо не е както трябва При не много сложна дефиниция, валидирането и парсване до обекти (от типа на STL) трябва да е поне 1MB/s. Нямам представа как работят Qt библиотеките, но в общия случай най-тежкото в алгоритмите е заемането на памет. Средно на 5-10 байта се прави malloc(), тъй че един отделен пул може доста да ускори нещата. Другото е какво правиш с данните, евентуално записването може да се бави, но това пък няма нищо общо с XML-а. При всички случаи те съветвам да не бягаш от XML-a. Той си се налага като стандарт за тоя сорт приложения. Ако трябва си пренапиши парсера, или поне виж как да го оптимизираш вместо да измисляш нови формати... |
||||||||||
| Автор: | michev [ Пет Окт 21, 2011 1:24 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Кой от всичките ХМЛ парсери на кют ползваш? Да не си се метнал на xpath? |
|
| Автор: | MidNighT_SpiRiT [ Пет Окт 21, 2011 3:00 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Използвам QXmlStreamReader - чрез него съм си направил прост парсер. Като гледах днес вероятно повечето време се губи от копиране на данните от едно място на друго. Примерно QTcpSocket->readAll() връща QByteArray, който трябва да го преобразувам на QString, за да пратя към QXmlStreamReader. Данните, които не са числа са кодирани base64 и трябва да ги предам към функцията, която декодира и тн. Най-големият проблем е и картинката, която пращам (също кодирана base64) с размер 40-60kB. |
|
| Автор: | michev [ Пет Окт 21, 2011 4:05 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Не го преобразувай до QString. На QXmlStreamReader конструктура приема и QByteArray. |
|
| Автор: | MidNighT_SpiRiT [ Пет Окт 21, 2011 5:02 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Конструктора да, но в случая QXmlStreamReader::addData(String&) си иска само QString |
|
| Автор: | michev [ Пет Окт 21, 2011 5:29 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Ми не викай addData. След като си създал класа и си му задал референция към QByteArray не е нужно да викаш addData. |
|
| Автор: | MidNighT_SpiRiT [ Вто Окт 25, 2011 3:04 pm ] |
| Заглавие: | Re: Комуникация през TCP сокети |
Мерси michev, въпреки, че не тръгва както би трябвало да е, т.е. да му задам девайс и да си чете от там. Ползвам пак addData(), но видях, че можело да се подава const char* указател. Процесорът е ARMG45 на 400MHz. Като цяло пак е бавно, но малко по-бързо от преди. |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|