реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Оффтоп по М2М серверам GPS мониторинга.
sobr
сообщение Apr 20 2013, 09:50
Сообщение #31


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



думаю можно обойтись и без облака
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Apr 20 2013, 10:06
Сообщение #32


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
думаю можно обойтись и без облака
Как пишут, облака позволяют ускорить сборку любого проекта, используя готовые API.
Определение и назначение хорошее, но где это все лежит и как собирать, информации нет...
Go to the top of the page
 
+Quote Post
sobr
сообщение Apr 20 2013, 10:21
Сообщение #33


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(Alt.F4 @ Apr 20 2013, 17:06) *
Как пишут, облака позволяют ускорить сборку любого проекта, используя готовые API.
Определение и назначение хорошее, но где это все лежит и как собирать, информации нет...
Мне это пока и не надо. Я вам показал направление на которое я на данный момент ориентируюсь. Куда понесет вас - вам решать. biggrin.gif
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Apr 21 2013, 12:38
Сообщение #34


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
Это в смысле HTTP от трекера на сервер? Т.е. трекер периодически устанавливает http-соединение и методом POST отправляет данные, я так понял?

Да, совершенно верно. Ничего тут сложного (как считают некоторые посетители форума) нет. HTTP + JSON это стандарт де факто для большинства существующих API, в том числе и высокопроизводительных.
Кстати, опыт разработки на Эрланге у меня есть. Это совершенно великолепный язык, позволяющий вашу задачу решить в порядка 100 строк. Но у него своя совершенно особая философия, требующая глубокого погружения. И для него практически однозначно нужен линукс - под виндой глючит. Да, для справки, программисты на Эрланге ненавидят node.js (это к sobr'у). sm.gif
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Apr 21 2013, 15:38
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Согласен, сложного ничего нет. Наоборот, все слишком просто. Но слишком неэффективно. Если посмотреть на диаграмму в статье по ссылке от sobr, то видим огромные пики нагрузки при массовом отключении клиентов. А Вы предлагаете делать это постоянно и часто.
Конечно, может, я не прав, но код на Эрланге, или на node.js в любом случае обращается сисколом к ядру ОС, к тем же сокетам. И эти языки сделаны для упрощения разработки, облегчения переносимости и обслуживания кода как компромисс с эффективностью, но никак не для эффективности.
В полном идеале для максимальной эффективности надо написать на ассемблере свой заточенный драйвер езернет-карты, свой стек, парсер и БД sm.gif Ясно, что это фантастика, но оптимизированный демон на С с минимумом сисколов будет всегда эффективнее любых высокоуровневых надстроек, несмотря на их новомодные названия. Но вот отточить его весьма непросто.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Apr 21 2013, 18:23
Сообщение #36


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Да топик стартеру эффективности большой не требуется - до 10000 клиентов, а отдавать данные можно раз в 10 минут, например. Нагрузка детская.
Цитата
Ясно, что это фантастика, но оптимизированный демон на С с минимумом сисколов будет всегда эффективнее любых высокоуровневых надстроек, несмотря на их новомодные названия. Но вот отточить его весьма непросто.

Это конечно. Но вот сделать хороший сервер хоть TCP, хоть HTTP на C задача очень нетривиальная. Неопытный программист сделает в лоб по потоку на клиента и сразу же проиграет решению на эрланге.
Тем не менее, я не советую топикстартеру браться за эрланг (хотя для самообразования очень даже советую), а порекомендую:
1. Поискать готовый сервис и присоседиться к нему.
2. Если не найдёт и решение нужно долгоиграющее и расширяемое, то взять веб сервер и прикрутить свой обработчик. Данные складировать сразу в БД картографического сервера.
3. Если совсем нет времени и хочется TCP, могу дать свой сервер на C#. Там по потоку на клиента, винда, бинарный протокол и прочая ересь, зато TCP сервер сразу заработает.
Go to the top of the page
 
+Quote Post
Alt.F4
сообщение Apr 21 2013, 19:26
Сообщение #37


Профессионал
*****

Группа: Свой
Сообщений: 1 468
Регистрация: 28-03-10
Из: Беларусь
Пользователь №: 56 256



Цитата
Поискать готовый сервис и присоседиться к нему.
Этим как раз упорно и занимаюсь. Причем хочется купить сервис и поставить на свой физический сервер (ну или виртуальный).
Одно не нравится, что потом ничего изменить нельзя будет, если потребуется.

HTTP использовать категорически неприемлемо, данные отдаю каждые 3-9сек.
А чтобы поднять систему с нуля и до вести до ума , потребуется как минимум полгода.
Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Apr 21 2013, 19:51
Сообщение #38


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



Цитата
HTTP использовать категорически неприемлемо, данные отдаю каждые 3-9сек.

Мне что-то так чудится, что Вы и без HTTP не сможете отдавать данные каждые 3-9 сек. Подумайте на досуге, что Ваши устройства будут делать в те моменты, когда связи не будет. Что-то мне подсказывает, что данные они должны накапливать, а передавать при появлении связи. Так что мешает и по HTTP аналогично работать: данные накапливать, а передавать блоками с заданным интервалом?
Go to the top of the page
 
+Quote Post
Velund
сообщение Apr 21 2013, 21:10
Сообщение #39


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 19-11-04
Пользователь №: 1 177



QUOTE (Alt.F4 @ Apr 20 2013, 07:20) *
Поступила информация, что используя UDP, от сервера можно и не дождаться потом ответа. Я не сильно разбираюсь, но объяснили, что не все роутеры (если клиент спрятан за NAT'ами) умеют передавать обратный пакет клиенту, там порты пробрасываются и все пакеты не доходят.


Информация в общих чертах правильная, но в ней не упомянуты граничные условия ее применимости. wink.gif NAT у некоторых провайдеров скидывает UDP "сессию" через 4-5 секунд в периоды пиковой загрузки.

И, кстати, не надо раскатывать губу на то,что TCP от этого спасет. Не спасает. Сносят малоактивные сессии на своих NAT провайдеры только так.

Вообще тема эта занятная. wink.gif Можно сделать реализацию протокола, отточить, отполировать до блеска, гордиться за себя... И потом СИЛЬНО удивиться, получив первого клиента с симкой из какой то новой сетки. wink.gif

От первой работоспособной реализации до действительно беспроблемного продукта примерно тот же путь, какой бывает от студенческого курсового, сданного на "отлично" до серийно выпускаемого изделия на его базе. wink.gif
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Apr 21 2013, 21:53
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Да, такая беда есть, и тема действительно занятная. Но за 4-5 сек трекер получит подтверждение сервера, т.к. реально пинг гораздо меньше даже в жпрс. Т.е. в итоге будем иметь "мертвые периоды" между посылками трекера (если они реже 5 сек), в которые трекер будет не доступен с сервера. Но после каждого очередного пакета от трекера он будет доступен в течение этих 4-5 сек, и можно давать ему управляющие данные.
И верно замечено, что TCP не спасает. Ведь NAT не отслеживает tcp-сессию по syn и fin (он бы замахался, да и проблемы зависших сессий сразу). Точно так же после очередного ip-tcp-пакета обновляется таймаут таблицы портмапинга. Просто tcp-сокет имеет встроенный таймер KeepAlive, гоняющий пустые пакеты при отсутствии обмена. Это и создает иллюзию, что в случае ТСП трекер доступен с сервера всегда, а в случае удп - не всегда.
Да только если NAT удаляет запись портмапинга в удп, то первый же пакет от трекера создает ее вновь, и если исходящий порт другой, ничего страшного: сервер то отвечает по адресу отправителя.
А вот если такое случится на тсп-сесии, то серверный сокет ну никак не примет пакет с другого порта, и реконект неизбежен.
На самом деле ничто не мешает ввести keepalive таймер в удп-модель и получить в результате постоянную доступность трекера с сервера. И преимущества:
- интервал keepalive будет настраиваемым (можно даже сделать умную адаптацию), в то время как в тсп он определяется настройками сокета (параметрами стека), недоступными в большинстве ОС. В итоге можно подобрать нужный интервал KeepAlive и экономить трафик, лишний раз не гоняя пустые пакеты.
- "нулевой" удп-пакет короче, чем тсп (за счет заголовка, за который тоже, кстати, идет оплата), опять же экономия трафика.
А что касается идеальных реализаций, то их просто не бывает: всегда что-нибудь вылезет рано или поздно. И чем пытаться создать идеальную реализацию, лучше обеспечить максимально оперативное устранение (типа апгрейда firmware и т.п.).
Go to the top of the page
 
+Quote Post
Velund
сообщение Apr 21 2013, 23:51
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 19-11-04
Пользователь №: 1 177



QUOTE (GeGeL @ Apr 22 2013, 01:53) *
А что касается идеальных реализаций, то их просто не бывает: всегда что-нибудь вылезет рано или поздно. И чем пытаться создать идеальную реализацию, лучше обеспечить максимально оперативное устранение (типа апгрейда firmware и т.п.).


Согласен. wink.gif Каждый год что то, да вылезает.

А насчет последнего предложения - это сильно осложняет жизнь при подходе "купил готовый компонент и забыл о нем". wink.gif С мечты о котором началась ветка, кстати. wink.gif
Go to the top of the page
 
+Quote Post
sobr
сообщение Apr 22 2013, 00:11
Сообщение #42


Знающий
****

Группа: Свой
Сообщений: 926
Регистрация: 18-01-07
Пользователь №: 24 552



Цитата(andrewlekar @ Apr 21 2013, 19:38) *
...Да, для справки, программисты на Эрланге ненавидят node.js (это к sobr'у). sm.gif

Программисты под 1С думаю тоже. Мне то зачем об этом знать?

Цитата(andrewlekar @ Apr 21 2013, 19:38) *
3. Если совсем нет времени и хочется TCP, могу дать свой сервер на C#. Там по потоку на клиента, винда, бинарный протокол и прочая ересь, зато TCP сервер сразу заработает.
И что, обеспечит 10000 соединений? Дайте потестить.
Go to the top of the page
 
+Quote Post
Alechek
сообщение Apr 22 2013, 05:08
Сообщение #43


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Alt.F4 @ Apr 20 2013, 09:20) *
Поступила информация, что используя UDP, от сервера можно и не дождаться потом ответа. Я не сильно разбираюсь, но объяснили, что не все роутеры (если клиент спрятан за NAT'ами) умеют передавать обратный пакет клиенту, там порты пробрасываются и все пакеты не доходят.


Кстати, по поводу UDP. Как показала практика,
1. длина пакета по заголовку UDP и фактическая могут отличатся.
2. на CRC UDP пакета надеяться нельзя. Бывает, приходят данные, CRC в порядке, а внутри, в середине пакета, либо FF либо просто набор битов и байтов.. Замечено у Мегафона во внутресетевом роуминге.

Go to the top of the page
 
+Quote Post
andrewlekar
сообщение Apr 22 2013, 05:08
Сообщение #44


Знающий
****

Группа: Участник
Сообщений: 837
Регистрация: 8-02-07
Пользователь №: 25 163



"И что, обеспечит 10000 соединений? Дайте потестить."
Нет, не обеспечит. Я же говорю, там всякая ересь. Но если нужен образец, от чего плясать, то очень даже подойдет. Там пул соединений добавить, потюнить винду на предмет ограничения сокетов, может и вытянет в итоге.
Go to the top of the page
 
+Quote Post
GeGeL
сообщение Apr 22 2013, 06:13
Сообщение #45


Местный
***

Группа: Свой
Сообщений: 403
Регистрация: 29-04-11
Из: Украина
Пользователь №: 64 682



Цитата(Alechek @ Apr 22 2013, 08:08) *
Кстати, по поводу UDP. Как показала практика,
1. длина пакета по заголовку UDP и фактическая могут отличатся.
2. на CRC UDP пакета надеяться нельзя. Бывает, приходят данные, CRC в порядке, а внутри, в середине пакета, либо FF либо просто набор битов и байтов.. Замечено у Мегафона во внутресетевом роуминге.


100% согласен. Для UDP-based протоколов необходима своя философия:
1. каждый пакет должен содержать идентификатор трекера. Обычно это строка imei, но чтобы не быть расточительным, можно использовать crc32 от нее или даже двухбайтный назначаемый номер трекера для парка из 65535 машин.
2. На сервере держим массив из нужного к-ва (по к-ву машин) u32 IP и u16 port, и обновляем при получении валидного пакета. Еще можно писать в массив таймстемп. Это на пару порядков меньше ОЗУ, чем используют такое же к-во открытых тсп-сокетов.
3. Конечно, на CRC заголовка нельзя полагаться (кстати, допускается нулевая). В каждом пакете должна содержаться crc32 или хотя-бы crc16. Конечно, это дополнительная нагрузка на обработчик сервера, без этого никак. В TCP, кстати, аналогично: если длина там строго контролируется по SEQ, то целостность данных - только обычным суммированием по модулю.
4. Длину можно брать и из заголовка: если используется crc, то при неверной длине она в любом случае не совпадет, и пакет отвергается.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01456 секунд с 7
ELECTRONIX ©2004-2016