Голосование

Считаете ли вы необходимым использование международных форматов WITS/WITSML на станциях ГТИ?

Безусловно!
10 (76.9%)
Да, но форматы устарели.
0 (0%)
Эти форматы должны поддерживаться российскими программистами, но особой надобности в них нет.
2 (15.4%)
Нет необходимоти поддержки этих форматов. Мы их просто не используем.
1 (7.7%)
Я патриот, и нам не надо ничего буржуйского!
0 (0%)

Проголосовало пользователей: 13

Голосование закончилось: 04 Февраль 2008, 15:32:52

Автор Тема: WITS/WITSML  (Прочитано 59058 раз)

Оффлайн Serg_sd

  • Старенький
  • **
  • Сообщений: 32
  • Карма: +5/-0
    Re: WITS/WITSML
    « Ответ #210 : 18 Май 2017, 16:35:38 »
    Подключили три клиента , все корректно принимают никакого  Мусора невидно. Можете предложить корректный код без потоков для N клиентов.

    Оффлайн PDS

    • Старожил
    • ****
    • Сообщений: 567
    • Карма: +21/-24
      Re: WITS/WITSML
      « Ответ #211 : 18 Май 2017, 17:42:56 »
      Подключили три клиента , все корректно принимают никакого  Мусора невидно. Можете предложить корректный код без потоков для N клиентов.

      Если мусора не видно, это не ознаяает что работает корректно, это говорит о том, что клиент это все фильтрует, но он не должен это фильтровать, к нему должны приходить чистые WITS данные. И связь должна работать всегда в режиме онлайн, а не разрыватсья каждый раз при отправке одного пакета. Это слишком большая нагрузка на операционку и на все звенья цепи. А уж создание доп потока при этом - это уже совсем через край.

      Корректный код можно взять из примеров boost:asio, очень хорошая реализация, которая для Windows использует порты завершения ввода вывода а не селект. У меня сервер на этой библиотеке держит под несколько тысяч удаленных клиентов. На край можно взять асинхронную работу с сокетами из Qt. Она не такая потимизированная как boost:asio, но обычно хватает с запасом, если нет цели написать высоконагруженный сервер.

      Оффлайн Serg_sd

      • Старенький
      • **
      • Сообщений: 32
      • Карма: +5/-0
        Re: WITS/WITSML
        « Ответ #212 : 18 Май 2017, 19:11:55 »
        Не знаю  почему вы решили , что связь разрывается после отправки пакета. Открываем соединение  и передаем пакеты пока клиент не отключится, только тогда сокет закрывается.

        Оффлайн PDS

        • Старожил
        • ****
        • Сообщений: 567
        • Карма: +21/-24
          Re: WITS/WITSML
          « Ответ #213 : 18 Май 2017, 19:25:29 »
          Не знаю  почему вы решили , что связь разрывается после отправки пакета. Открываем соединение  и передаем пакеты пока клиент не отключится, только тогда сокет закрывается.

          Писал на память, мог конечно ошибиться, там была строка по принятию данных, которые как бы отсудствуют в направлении к серверу. WITS это односторонний протокол. Но если связь не рвется, то зачем гонять 80% мусорного траффика? Нужно отправлять данных ровно столько, сколько заимают данные витса, а не весь массив.

          Вот пример неблокирующего сокета:
          http://www.boost.org/doc/libs/1_64_0/doc/html/boost_asio/example/cpp03/nonblocking/third_party_lib.cpp
          « Последнее редактирование: 18 Май 2017, 19:30:16 от PDS »

          Оффлайн Serg_sd

          • Старенький
          • **
          • Сообщений: 32
          • Карма: +5/-0
            Re: WITS/WITSML
            « Ответ #214 : 19 Май 2017, 14:03:06 »

                Если нам известна длина примерная витс строки , размер буфера можно подогнать и что страшного если в конце будет десяток нулей? И так ли это крититчно что сокет блокирующий , зачем заморачиватся неблокирующими сокетами?

            Оффлайн PDS

            • Старожил
            • ****
            • Сообщений: 567
            • Карма: +21/-24
              Re: WITS/WITSML
              « Ответ #215 : 20 Май 2017, 01:07:33 »

                  Если нам известна длина примерная витс строки , размер буфера можно подогнать и что страшного если в конце будет десяток нулей? И так ли это крититчно что сокет блокирующий , зачем заморачиватся неблокирующими сокетами?

              Вы когда полноценный сервер напишите, то поймете, что ничего подогнать нельзя в десяток байт, разброс там будет намного больше. Далее, никаких нулей и никаокго мусора там не должно быть, иначе сервер будет заниматься тупой работой по очисте мусора, который программист не соизволил удалить. А если учесть что иногда используют СОМ порт на скорости 9600 для передачи витса, то там еще и траффик в пустую потреблять начнете своим мусором.

              Теперь про блокирующие сокеты и вообще многопоточность. Так вот, по моей статистике хорошее понимание многопоточности присутствует примерно у 5% программистов. То что вы там написали и думаете что облегчили себе работу через создание потоков, так вот, нет, это заблуждение, вы просто не реализовали правильную синхронизацию. Создание нового потока для операционной системы это накладные расходы, если уж хотите использовать многопоточность, так работайте через пул потоков, что бы постоянно не пересоздавать потоки. И вот когда это все реализуете, потом поймете, что реализовать однопоточный сервер с неблокирующими сокетами проще. И главное он будет надженее.

              У меня сейчас сервер для удаленного мониторинга работает в одном потоке, без проблем держит 10 ГТИ станций и к каждой станции по 10 клиентов. И при этом нагрузки на процессор почти нет. Мне кажется быстрее проблема с инет каналом будет, чем с процессором. Причем там комп стоит NUC, это такой офисный ПК, на селероне. Купили его тысяч за 15.

              Оффлайн amt

              • Местный
              • ***
              • Сообщений: 67
              • Карма: +7/-1
                • http://amt-s.spb.ru
              Re: WITS/WITSML
              « Ответ #216 : 21 Май 2017, 18:39:06 »

                  Если нам известна длина примерная витс строки , размер буфера можно подогнать и что страшного если в конце будет десяток нулей? И так ли это крититчно что сокет блокирующий , зачем заморачиватся неблокирующими сокетами?

              У меня сейчас сервер для удаленного мониторинга работает в одном потоке, без проблем держит 10 ГТИ станций и к каждой станции по 10 клиентов. И при этом нагрузки на процессор почти нет. Мне кажется быстрее проблема с инет каналом будет, чем с процессором. Причем там комп стоит NUC, это такой офисный ПК, на селероне. Купили его тысяч за 15.
              10 станций - это ничтожно мало, чтобы рассуждать об эффективности сервера под нагрузкой. А количество клиентов тут вообще сбоку, ибо важен в данной задаче только трафик.

              В нормальной многопоточной ОС потоки порождаются очень быстро и без особой нагрузки на процессор, поскольку все таблицы созданы на старте системы и память под них отведена.
              То, что процессор у вас не напрягается, есть не ваш результат, а характеристика задачи - ну что там делать процессору?!

              Целерон, конечно, по сегодняшним временам, полное ничто, но в 2005 у меня сервер на нем считал 65 моделей скважины для 65 удаленных клиентов без труда разбираясь в 139 потоках.

              Это я к тому, что смысла нет здесь  программистские фокусы рекламировать.

              Оффлайн Serg_sd

              • Старенький
              • **
              • Сообщений: 32
              • Карма: +5/-0
                Re: WITS/WITSML
                « Ответ #217 : 24 Май 2017, 12:12:47 »
                Заниматься разборкой витс строки будет клиент, а не сервер, не надо путать . Нужен стандартный клиент чтобы проверить работу сервера, те клиенты которыя я подключал без проблем проглатывают и парсят витс строку с " мусором" как вы говорите.  Так что это пустые разговоры про потоки , сокеты , синхронизацию. Ваш  пример  кода не годится , чтобы его проверить нужно ставить буст , а этот гемор совершенно лишний . Предложите код C/ C++ использующий  win api  , тогда посмотрим.

                Вы писали:
                Вы когда полноценный сервер напишите, то поймете, что ничего подогнать нельзя в десяток байт, разброс там будет намного больше. Далее, никаких нулей и никаокго мусора там не должно быть, иначе сервер будет заниматься тупой работой по очисте мусора, который программист не соизволил удалить. А если учесть что иногда используют СОМ порт на скорости 9600 для передачи витса, то там еще и траффик в пустую потреблять начнете своим мусором.

                Теперь про блокирующие сокеты и вообще многопоточность. Так вот, по моей статистике хорошее понимание многопоточности присутствует примерно у 5% программистов. То что вы там написали и думаете что облегчили себе работу через создание потоков, так вот, нет, это заблуждение, вы просто не реализовали правильную синхронизацию. Создание нового потока для операционной системы это накладные расходы, если уж хотите использовать многопоточность, так работайте через пул потоков, что бы постоянно не пересоздавать потоки. И вот когда это все реализуете, потом поймете, что реализовать однопоточный сервер с неблокирующими сокетами проще. И главное он будет надженее.

                У меня сейчас сервер для удаленного мониторинга работает в одном потоке, без проблем держит 10 ГТИ станций и к каждой станции по 10 клиентов. И при этом нагрузки на процессор почти нет. Мне кажется быстрее проблема с инет каналом будет, чем с процессором. Причем там комп стоит NUC, это такой офисный ПК, на селероне. Купили его тысяч за 15.

                Оффлайн PDS

                • Старожил
                • ****
                • Сообщений: 567
                • Карма: +21/-24
                  Re: WITS/WITSML
                  « Ответ #218 : 24 Май 2017, 15:39:49 »
                  Заниматься разборкой витс строки будет клиент, а не сервер, не надо путать . Нужен стандартный клиент чтобы проверить работу сервера, те клиенты которыя я подключал без проблем проглатывают и парсят витс строку с " мусором" как вы говорите.  Так что это пустые разговоры про потоки , сокеты , синхронизацию. Ваш  пример  кода не годится , чтобы его проверить нужно ставить буст , а этот гемор совершенно лишний . Предложите код C/ C++ использующий  win api  , тогда посмотрим.

                  Конечно клиент, только там не должно быть мусора. Нет такого понятия как стандартный клиент, один заработает, другой скажет о недопустимых символах. А третий скажет что лишние символы просто не успевает обрабатывать. Я это все уже прошел. С Роснефтью например. Они просто смотрят логи, что приходят и говорят - этого не должно быть. Можете потом доказывать кто и что должен. И по мне, они правы, не должно быть там лишнего мусора. По поводу кода, в инете можно много чего найти, но насколько это все будет стабильно работать и насколько это качественно реализовано - вот тут вопрос. Я помню первые версии ASIO в бусте, вылизывали его года полтора-два. В итоге получился очень качественный модуль, зачем рисковать и предлагать сырые неотлаженные решения. Я пробовал многие библиотеки, вот результат этих изысканий - boost::asio или Qt для не сильно нагруженного сервера. Если клиентов несколько десятков то без проблем подойдет Qt, тут минус только один - размер бинарника огромный. А писать на чистом WIN API - это уже разве что для себя, дома там поразбираться с WinAPI, но не как коммерческий проект. Во первых это воровство времени и денег и работодателя, а во вторых сколько там будет ошибок. Вот на написание тестового сервера на бусте хватит 1 часа вместе с установкой буста.

                  ЗЫ: Вот еще альтернатива - POCO, но на момент когда я ее смотрел серверная реализация сокетов там была на обычном селекте, что как бы не есть хорошо, лучше уж тогда  Qt. Как сейчас - не знаю.
                  https://pocoproject.org/download/index.html
                  « Последнее редактирование: 24 Май 2017, 16:04:12 от PDS »

                  Оффлайн Serg_sd

                  • Старенький
                  • **
                  • Сообщений: 32
                  • Карма: +5/-0
                    Re: WITS/WITSML
                    « Ответ #219 : 25 Май 2017, 16:38:19 »
                    Не вижу проблем с фиксированной длиной строки, но если надо можно сделать динамический размер, если попросят. А уж какие библиотеки и языки использвать для реализации это дело вкуса. Буст это вообще испытательный полигон для С++, так пишут, не хочу связываться с этим , тем более с другими малоизвестными библиотеками. QT жирноват для моей задачи, то же ни к  чему.

                    Вы писали:
                    Конечно клиент, только там не должно быть мусора. Нет такого понятия как стандартный клиент, один заработает, другой скажет о недопустимых символах. А третий скажет что лишние символы просто не успевает обрабатывать. Я это все уже прошел. С Роснефтью например. Они просто смотрят логи, что приходят и говорят - этого не должно быть. Можете потом доказывать кто и что должен. И по мне, они правы, не должно быть там лишнего мусора. По поводу кода, в инете можно много чего найти, но насколько это все будет стабильно работать и насколько это качественно реализовано - вот тут вопрос. Я помню первые версии ASIO в бусте, вылизывали его года полтора-два. В итоге получился очень качественный модуль, зачем рисковать и предлагать сырые неотлаженные решения. Я пробовал многие библиотеки, вот результат этих изысканий - boost::asio или Qt для не сильно нагруженного сервера. Если клиентов несколько десятков то без проблем подойдет Qt, тут минус только один - размер бинарника огромный. А писать на чистом WIN API - это уже разве что для себя, дома там поразбираться с WinAPI, но не как коммерческий проект. Во первых это воровство времени и денег и работодателя, а во вторых сколько там будет ошибок. Вот на написание тестового сервера на бусте хватит 1 часа вместе с установкой буста.

                    Оффлайн soloveid

                    • Начинающий
                    • *
                    • Сообщений: 5
                    • Карма: +0/-0
                      Re: WITS/WITSML
                      « Ответ #220 : 29 Май 2017, 20:09:18 »
                      Я тут Вас обоих не понимаю
                      Вставлю свои 5 копеек.

                      1) Кто клиент, кто сервер.
                      Данные отправляет Клиент, а Сервер их принимает, а тут все говорят на оборот. Хм, не понимаю.
                      Ну и повышенные требования должны быть к принимающей стороне, так как ей надо это всё принимать и складывать,
                      а не отправителю.
                      2) Мусор в пакете.
                      Ну есть документация на WITS протокол и там написано, что надо отправлять только те данные, которые изменились.
                      Но это стандарт, в реале все хотят по-разному.
                      В реале и формат пакетов не соответствует стандартам WITS.
                      Так что только возможность гибкой настройки и спасает лично нас.
                      3) Разрыв соединения.
                      Ну в протоколе WITS вроде про это ничего не написано. Может эти разрывы и естественные (связь потерялась).
                      Ну а некоторые рвут соединение скорее всего из-за того, что непонятно как определить что на той стороне ещё не отвалились и ты тупо шлёшь данные
                      в никуда. Проще переподсоединиться и быть уверенным, что сервер скорее жив. А так как WITS в базовой версии (1.0) не предполагает никакой синхронизации
                      с клиентом, то это неплохое подспорье.

                      Оффлайн Serg_sd

                      • Старенький
                      • **
                      • Сообщений: 32
                      • Карма: +5/-0
                        Re: WITS/WITSML
                        « Ответ #221 : 30 Май 2017, 19:06:55 »
                        1) В данном случае данные отправляет сервер клиенту  по протоколу WITS.
                        3) Предполагается если с клиентом  связь пропала сервер завершит поток и закроет сокет


                        Оффлайн rusadmin

                        • Начинающий
                        • *
                        • Сообщений: 5
                        • Карма: +0/-0
                          Re: WITS/WITSML
                          « Ответ #222 : 09 Октябрь 2017, 22:16:42 »
                          Подскажите пожалуйста,есть ли возможность передавать данны из DTCIS по стандарту  WITS удаленному потребителю? Есть ли подобные решения,на данный момент?
                          Коллеги, подниму вопрос. Сама по себе DTCIS может передавать в формате WITS? Или есть у кого стороннее решение? (Без привязки к мониторингу). Нужно только передавать данные. Спасибо.

                          Оффлайн Chrom

                          • Муравьев Юрий Анатольевич
                          • Старожил
                          • ****
                          • Сообщений: 301
                          • Карма: +31/-17
                          • ГеоСенсор
                            • ГеоСенсор
                          Re: WITS/WITSML
                          « Ответ #223 : 10 Октябрь 2017, 03:21:44 »
                          Подскажите пожалуйста,есть ли возможность передавать данны из DTCIS по стандарту  WITS удаленному потребителю? Есть ли подобные решения,на данный момент?
                          Коллеги, подниму вопрос. Сама по себе DTCIS может передавать в формате WITS? Или есть у кого стороннее решение? (Без привязки к мониторингу). Нужно только передавать данные. Спасибо.
                          на сколько я в курсе- у этой системы (DTCIS ) не все хорошо с поддержкой.
                          есть вариант - ставить Геоскейп2. там есть поддержка ИМС-овской системы сбора.
                          не держи вопрос в себе, спрашивай!

                           



                          Покер онлайн