ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
18 мая
258806
Sylvan (16.06.2011 16:40, просмотров: 16920)
TCP/IP multi socket. Как правильно реализовать? Пользую LPC2478 совместно с IAR PowerPac, оттуда же RTOS, GUI и TCP\IP стек. Задача - прикинуться web-клиентом и рассылать GET запросы внутри своей маленькой сетки. Запросы короткие, сотня байт, ответы - такие же. НО! Одно из устройств (т.е. один из web server-ов) может и не ответить, а может и просто быть выключено юзверем. Кроме того, устройство может и подзадержать ответ до 200 мс в некоторых случаях. Количество устройств - до 30 штук. То есть, я - один web client и их 30 web servers. Чисто внутренняя сетка, никакого интернета, все протоколы - свои, известные. Я наметил варианты решения: 1. Под каждое устройство заводить свою задачу в OS. Там открывать сокет, посылать что надо и ждать ответа столько сколько надо. Если нет ответа или нет коннекта в течение 1 сек, завершать задачу или как-то выходить оттедова. Не нравится тем, что большой расход памяти идет - стек под каждую задачу заводить и еще надо как-то динамически задавать количетво устройств в сети.... криво как-то.... и я не могу просчитать хватит ли мне памяти на это. 2. Одна отдельная задача - web client. В ней создаем сокет, отсылаем, ждем ответа 1 сек, если нет - бросаем это дело, в любом случае закрываем сокет и открываем следующий. Но с учетом возможных 30 устройств, плюс задержки.... как бы не вышло слишком долго - юзверь подумает, что все зависло. 3. Тоже отдельная задача под web client. Но открываем одновременно столько сокетов сколько надо, быстро коннектимся ко всем подряд, отсылаем гет запросы, ждем ответов, на все - про все скажем 1 сек. Потом закрываем все сокеты. Как раз так я сейчас и сделал. При 2 серверах, подключенных к моему клиенту все работает отлично, при 3- бывают состояния, когда connect() возвращает ошибку, при 6 - 30% попыток законнектится оканчиваются провалом. Думаю, 30 серверов можно и не пробовать :( Буду рад любому совету.