|
|
  |
TCP или UDP?, Подскажите способ реализации |
|
|
|
Jan 18 2008, 09:01
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Aprox @ Jan 18 2008, 11:21)  Необходимо напомнить, что я имею ввиду локальные сети в промышленной и научно-технической сферах. Причем сети, построенные исключительно с помощью хабов, а они уже, насколько мне известно, являются большой редкостью. Цитата(Aprox @ Jan 18 2008, 11:21)  Типичное для таких сетей - один клиент и много серверов. Если сеть со временем меняет топологию или расширяется, рано или поздно возникнет ситуация когда два клиента попытаются обратиться к одному серверу. Цитата(Aprox @ Jan 18 2008, 11:21)  В настоящий момент, единственное, что сдерживает применение Ethernet в таких сетях,- это избыточные навороты с протоколами и TCP/IP стеками. ИМХО, ничто не сдерживает применение Ethernet Internet'a в таких сетях, ибо никакой избыточности в TCP/IP нет. Может, есть недостаток ресурсов выбранного МК, но это вопрос грамотности разработчика. Цитата(Aprox @ Jan 18 2008, 11:21)  Мне представляется, переход к Raw-пакетам в данном случае выглядит разумным. Мне, напротив, это кажется неразумным, но нужно ли спорить о вкусах?
|
|
|
|
|
Jan 18 2008, 09:09
|
Участник

Группа: Участник
Сообщений: 68
Регистрация: 19-07-06
Пользователь №: 18 918

|
Если есть время сначала создавать устройство, потом писать под него софт, а потом под устройство подстраивать топологию сети, тогда можно использовать все что угодно. Но времени обычно нет. А обычно есть сеть и есть информационная система, которая собирает данные о состоянии сети. Соотвественно при проектировании устройства нужно ориентироваться на стандартные протоколы. Чтоб монтажник мог придти в подъезд обжать кабель подключить девайс и уйти, а дейвайс сам бы себя сконфигурил и вписался в информационную систему. Здесь уж RAW пакетами не обойтись...
|
|
|
|
|
Jan 18 2008, 16:13
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(blackfin @ Jan 18 2008, 12:01)  Причем сети, построенные исключительно с помощью хабов, а они уже, насколько мне известно, являются большой редкостью. Делаю распределенную систему на базе свитча, но не хаба. К свитчу пока нареканий нет. Цитата Если сеть со временем меняет топологию или расширяется, рано или поздно возникнет ситуация когда два клиента попытаются обратиться к одному серверу. После того, как система сдана и запущена в работу на промышленном производстве, заказчик костьми ляжет, но не допустит никаких смен топологии. Расширение же производится установкой другого свитча, с большим числом портов. При этом появление новых клиентов в сети недопустимо, т.к. означает смену топологии. Заказчик против. Цитата ИМХО, ничто не сдерживает применение Ethernet Internet'a в таких сетях, ибо никакой избыточности в TCP/IP нет. Может, есть недостаток ресурсов выбранного МК, но это вопрос грамотности разработчика. Как показывает обсуждение в данном треде, и в ряде других на форуме, разработчики активно ищут пути не использовать стандартные решения TCP/IP. Потому, что для целей простого приборостроения этот стек протоколов дает большие накладные расходы по софту и быстродействию. Можно смириться с избыточностью софта и подобрать нужный МК, но поднять скорость передачи данных, увеличить загрузку сети, практически невозможно.
|
|
|
|
|
Jan 19 2008, 10:38
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Aprox @ Jan 18 2008, 19:13)  Делаю распределенную систему на базе свитча, но не хаба. К свитчу пока нареканий нет. Switch, конечно, тоже будет работать, но ограничение на максимальное кол-во хостов в Вашей локальной сети остается - максимум 96 хостов. Возможно, в Вашем конкретном случае это не проблема. Цитата(Aprox @ Jan 18 2008, 19:13)  При этом появление новых клиентов в сети недопустимо, т.к. означает смену топологии. Заказчик против. Новые клиенты могут появиться, если пользователь запустит несколько экземпляров браузера на одном компьютере.. Что тогда? Цитата(Aprox @ Jan 18 2008, 19:13)  Можно смириться с избыточностью софта и подобрать нужный МК, но поднять скорость передачи данных, увеличить загрузку сети, практически невозможно. Согласен, если число пакетов в секунду велико, а размер каждого пакета мал, переход к RAW-ethernet пакетам может дать существенный выигрыш в производительности сети.. Но стоит ли рассчитывать на устойчивую работу сети на пределе производительности? Кроме того, при использовании switch'а лишенного внутреннего буфера для хранения пакетов могут появиться проблемы с коллизиями пакетов в сегменте switch<->PC. Как следствие - потеря пакетов и т.д. и т.п. Впрочем, насколько мне известно, Вы эту проблему уже обсуждали: подключение устройства к ethernet.
|
|
|
|
|
Jan 20 2008, 16:29
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(blackfin @ Jan 19 2008, 13:38)  Новые клиенты могут появиться, если пользователь запустит несколько экземпляров браузера на одном компьютере.. Что тогда? Да, на такую возможность следует заложиться. Hапример, ограничить число подключений к серверу одной штукой. Цитата Согласен, если число пакетов в секунду велико, а размер каждого пакета мал, переход к RAW-ethernet пакетам может дать существенный выигрыш в производительности сети.. Но стоит ли рассчитывать на устойчивую работу сети на пределе производительности? Именно это я и хочу проверить. Искал похожие примеры реализаций, но не нашел. Приходится самому. Цитата Кроме того, при использовании switch'а лишенного внутреннего буфера для хранения пакетов могут появиться проблемы с коллизиями пакетов в сегменте switch<->PC. Как следствие - потеря пакетов и т.д. и т.п. Впрочем, насколько мне известно, Вы эту проблему уже обсуждали: Да, сегмент switch<->PC предполагается делать на 1Г Ethernet. Такие свитчи имеются а продаже. Сейчас я не готов обсуждать, какие подводные камни ждут на этом пути. Будем пробовать, и набивать шишки. Цитата(GL_basik @ Jan 18 2008, 12:09)  Если есть время сначала создавать устройство, потом писать под него софт, а потом под устройство подстраивать топологию сети, тогда можно использовать все что угодно. Но времени обычно нет. А обычно есть сеть и есть информационная система, которая собирает данные о состоянии сети. Соотвественно при проектировании устройства нужно ориентироваться на стандартные протоколы. Чтоб монтажник мог придти в подъезд обжать кабель подключить девайс и уйти, а дейвайс сам бы себя сконфигурил и вписался в информационную систему. Здесь уж RAW пакетами не обойтись... Полностью согласен- при наращивании уже готовой сети следует придерживаться тех протоколов и форматов, которые уже действуют в этой сети. Hо, когда система создается с нуля и поставляется в комплексе, то можно себе позволить некую свободу действий.
|
|
|
|
|
Feb 8 2008, 13:51
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Rst7 @ Feb 8 2008, 20:42)  Наработок нет. Я смотрел, чего там происходит, вроде не особо сложно реализовать. Самого в принципе интересует, можем скооперироваться... Я , честно говоря, не сильно знаком с JavaScript - сложного там ничего нет, но не знание методов объектов и прочих фичей напрягает, потому как двигаю с нуля проект. Посмотрев на некоторые библиотеки, сделал вывод, что написать надо свою, компактную, потому как меньше 15 кБ не видел, да и те, как говорил выше заточенны под взаиможействие с РНР на серверной стороне... Вот счас грызу XMLHTTPRequest - это, по моему, основной объект, через который можно что то серверу послать.
--------------------
|
|
|
|
|
Feb 8 2008, 15:46
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Все оказалось на много проще, чем я думал....пока  Вот HTML-страница Код <script type="text/javascript" language="JavaScript"> //Кроссбраузерная функция создания XMLHttpRequest: function getXmlHttp() { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if(!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; }
function doLoad(send_value) { var xmlhttp = getXmlHttp(); xmlhttp.open('POST', 'http://192.168.1.4./test.htm'+send_value, true); xmlhttp.onreadystatechange = function() { if(xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { document.getElementById('recv_txt').value = xmlhttp.responseText; } } } xmlhttp.send(null); } </script>
<form method="post" id="f" enctype="multipart/form-data" onsubmit="return false"> Send Text: <input type="text" name = "stxt" id="send_txt"> <input type="button" value="Send" id="snd" onclick="doLoad(document.getElementById('send_txt').value)"> Recv Text: <input type="text" name= "rtxt" id="recv_txt"> </form> Я думаю, объяснений не надо. Если что то не понятно - смотрите здесь http://javascript.itsoft.ru/ и здесь http://xmlhttprequest.ru/#useВсе, больше ниего не надо. Вот лог общения при вводе строки и нажатии на кнопку Send Цитата POST /test.htm1234567890 HTTP/1.1 Accept: */* Accept-Language: ru Referer: file://E:\TEMP\2\index.htmAccept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) Host: 192.168.1.4. Content-Length: 0 Connection: Keep-Alive Cache-Control: no-cache HTTP/1.0 200 OK Server: TinyNET 3.0 server SAM7X256-EK based system. Connection: Close Hello, World!
--------------------
|
|
|
|
|
Feb 9 2008, 15:04
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(prottoss @ Feb 8 2008, 16:22)  Привет всем!
Прочитал в теме про упоминание AJAX - если кто то занимался этим, может наставит на истинный путь. Задача у меня, как говорили выше, классическая. Управление девайсом через WEB-интерфейс. AJAX привлекает:
1. Малая нагрузка на контроллер со стороны Ethernet
2. Динамическое изменение данных на странице без ее перезагрузки.
Возможно у кого нибудь есть наработки по этой библиотеке. Пробовал работать с JsHTTPRequest - эта библа построенна на основе AJAX - но она заточена под крупные сервера с поддержкой PHP. Я пользовал AJAX для указанных задач. Из всех библиотек больше всего понравилась простотой и компактностью XHConn, представленная в http://xkr.us/code/javascript/XHConn/ Посмотрите этот сайт, там есть и пример.
|
|
|
|
|
Feb 10 2008, 08:13
|

Местный
  
Группа: Участник
Сообщений: 374
Регистрация: 7-11-07
Из: Moscow
Пользователь №: 32 131

|
Цитата(Aprox @ Feb 9 2008, 18:04)  Я пользовал AJAX для указанных задач. Из всех библиотек больше всего понравилась простотой и компактностью XHConn, представленная в http://xkr.us/code/javascript/XHConn/ Посмотрите этот сайт, там есть и пример. Необходимо добавить, что когда я рыскал в поисках подходящих инструментов для динамической подгрузки страниц WEB-сервера, то понял- это целый отдельный мир WEB-дизайна, в котором запросто утонуть имея другую профессию, например, электронщика- схемотехника. Можно запросто забыть, о чем собственно речь. Поэтому решил не углубляться в дебри, а ограничился минимальным- декларацией класса XHConn и работой с DOM в javasckript. Сама же страница и ее элементы рисуются традиционно, через HTML. По-моему, это самый быстрый и простой путь освоения AJAX непрофессионалу WEB-дизайна. Если есть время на освоение нового, то советую обратить внимание на Flash -технологии создания WEB-страниц. Это достойный конкурент AJAX. И по гибкости, и по графике, и по управлению, и по динамике, и по компактности. Плюс к тому, не зависит от заморочек броузеров. В Flash уже всторены разные классы по обмену данными http-запросами. Причем, от самого простых, до сложных XML с автоматическим парсингом. Hо увлекаться схемотехнику не следует, а то можно запросто утонуть.
|
|
|
|
|
Feb 10 2008, 09:21
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Aprox @ Feb 10 2008, 15:13)  дабы не утонуть  пока решил ограничится тем, о чем говорил выше - XMLHTTPRequest - пока для меня самое то. Полан взаимодействия примерно такой: 1.Клиент формирует запрос POST/GET на скрипт-файл c параметрами. Например GET /form1.sc 2. На стороне сервера открывается соответсвующий файл и парсится. 3. При необходимости выдаются данные клиенту... По третьему пункту есть вариант выдавать (если GET-запрос) не данные а сразу функцию JavaScript которая рассаживает данные в форме на свои места. Что нужно на сервере: 1. Таблица описателей переменных. 2. Функции работы с этими переменными. Элемент таблицы может выглядеть примерно так: Код /* MIB object class */ typedef struct __MIB_OBJ { MIB_TYPE type; /* Type of object */ MIB_ACCESS access; /* Access type */
UINT16 id;/* object ID */ CHAR *name; /* Name - zero terminated string */ void *value; /* Value */ UINT16 n_len; /* Name length */ UINT16 v_len; /* Value length */ } MIB_OBJ; Идентификация переменной по ID или name. Таким образом ЮЗЕРУ необходимо знать имена переменных в девайсе и/или их идентификаторы. ЮЗЕР создает HTML-файл и скрипты для того, что бы сервер знал, как располагать в ответе переменные и стоит ли их располагать там вообще. Кроме того сервер по таблице может определять, как работать с переменными. Когда все отработаю, естественно встанет вопрос о защите данных. Здесь возможен вариант проверки ID сессиии.... Или нет? Или еще чего? Пока не знаю
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|