Вопрос или проблема
У меня есть веб-приложение, которое собирает данные, и если любой браузер скачивает их первым, то второй не получает эту информацию о сканировании.
Используя браузер Chromium на ПК, я запускаю его следующим образом:
~$ chromium-browser -kiosk "http://pbx/adminkiosk/index?language=EN&username=2002&password=1234" &
~$ ps aux | grep "chromium-browser"
sun 31816 0.7 1.5 613092 61384 pts/4 Sl 15:44 0:03 /usr/lib/chromium-browser/chromium-browser -kiosk http://pbx/adminkiosk/index?language=EN&username=2002&password=1234
sun 31818 0.0 0.1 264484 7248 pts/4 S 15:44 0:00 /usr/lib/chromium-browser/chromium-browser -kiosk http://pbx/adminkiosk/index?language=EN&username=2002&password=1234
sun 31819 0.0 0.0 6464 408 pts/4 S 15:44 0:00 /usr/lib/chromium-browser/chromium-browser-sandbox /usr/lib/chromium-browser/chromium-browser --type=zygote
sun 31820 0.0 0.4 281364 18012 pts/4 S 15:44 0:00 /usr/lib/chromium-browser/chromium-browser --type=zygote
sun 31824 0.0 0.1 281364 5404 pts/4 S 15:44 0:00 /usr/lib/chromium-browser/chromium-browser --type=zygote
sun 31849 1.1 2.3 1052972 91968 pts/4 Sl 15:44 0:05 /usr/lib/chromium-browser/chromium-browser --type=renderer --lang=en-US --force-fieldtrials=ForceCompositingMode/disable/InfiniteCache/No/OmniboxHQPReplaceHUPRearrangeNumComponents/Standard/OmniboxSearchSuggestTrialStarted2013Q1/5/OneClickSignIn/BlueOnWhite/Prefetch/ContentPrefetchPrefetchOff/Prerender/Prerender15minTTL/UMA-New-Install-Uniformity-Trial/Experiment/UMA-Session-Randomized-Uniformity-Trial-5-Percent/group_15/UMA-Uniformity-Trial-1-Percent/group_45/UMA-Uniformity-Trial-10-Percent/group_06/UMA-Uniformity-Trial-20-Percent/group_02/UMA-Uniformity-Trial-5-Percent/default/UMA-Uniformity-Trial-50-Percent/group_01/ --disable-gl-multisampling --disable-accelerated-2d-canvas --disable-accelerated-video-decode --channel=31816.0.281183995
sun 31981 0.0 0.0 13584 924 pts/4 S+ 15:51 0:00 grep --color=auto chromium-browser
Теперь, поскольку открываются 2 экземпляра 2 URL, данные, которые сканируются, передаются другому экземпляру без балансировки. В результате моё приложение не работает с Chromium, но работает с Firefox/Opera.
Как я могу сказать Chromium остановить это и запустить URL только с одним экземпляром, а не дважды?
ПРАВКА:
Я пробовал следующие флаги без успеха:
--process-per-site
--single-process
Существует множество объяснений, почему это может происходить.
Я вспомнил, что Chromium также автоматически запускает процесс GPU (хотя не на моем ноутбуке), и так как вы используете Alienware, я предполагаю, что процесс GPU “спит” с 0% использованием, ожидая, чтобы отобразить какую-то графику.
Я предлагаю вам попробовать следующие флаги:
--disable-gpu-process-prelaunch
--disable-software-rasterizer
для отключения GPU (и дополнительных функций)
или этот флаг:
--in-process-gpu
чтобы запустить его как поток
вы также можете попробовать
process-per-tab
но похоже, что вы уже пробовали что-то подобное, что не помогло.
пожалуйста, сообщите о ваших результатах 🙂
Ответ или решение
Для обеспечения работы веб-приложения без конфликтов между несколькими экземплярами Chromium, необходимо обратить внимание на способ запуска браузера и использование определённых параметров командной строки. Проблема, с которой вы столкнулись, связана с тем, что браузер может запускать несколько процессов, что приводит к параллельной обработке запросов, и, как следствие, к некорректной работе приложения.
Решение проблемы: Запуск Chromium в одном экземпляре
Чтобы убедиться, что Chromium работает как единый экземпляр и не открывает дополнительные окна или процессы, следует воспользоваться несколькими ключевыми флагами:
-
Использование флага
--user-data-dir
:
Этот флаг указывает на директорию данных пользователя. Если запустить несколько экземпляров Chromium, они могут использовать разные каталоги для хранения данных, что также может привести к их параллельной работе. Убедитесь, что используете один и тот же каталог.chromium-browser --user-data-dir="/path/to/single/profile" -kiosk "http://pbx/adminkiosk/index?language=EN&username=2002&password=1234"
-
Флаг
--no-sandbox
(для разработки):
Убедитесь, что вы осознаете риски, связанные с использованием этого флага, так как он отключает изоляцию процессов. Используйте его только в случае понимания последствий.chromium-browser --no-sandbox -kiosk "http://pbx/adminkiosk/index?language=EN&username=2002&password=1234"
-
Флаги для управления процессами:
Попробуйте следующие флаги, которые помогут ограничить количество процессов, создаваемых браузером:chromium-browser --single-process -kiosk "http://pbx/adminkiosk/index?language=EN&username=2002&password=1234"
Флаг
--single-process
может помочь, хотя его использование в некоторых версиях Chromium может быть ограничено. -
Управление GPU-процессами:
Учитывая специфику вашего устройства, можно попробовать отключить графические процессы или настроить их работу:chromium-browser --disable-gpu-process-prelaunch --disable-software-rasterizer -kiosk "http://pbx/adminkiosk/index?language=EN&username=2002&password=1234"
-
Проверка наличия дополнительных параметров:
Если указанные выше варианты не сработали, убедитесь, что нет конфликтующих процессов. Например, проверьте, нет ли других запущенных экземпляров Chromium перед запуском нового.
Итог
Работающая конфигурация может выглядеть так:
chromium-browser --user-data-dir="/path/to/single/profile" --disable-gpu-process-prelaunch --no-sandbox --single-process -kiosk "http://pbx/adminkiosk/index?language=EN&username=2002&password=1234"
Советую протестировать вышеописанные параметры и, если возникнут дополнительные проблемы, проверьте обновления браузера или обратитесь к документации Chromium для поиска возможных новых флагов и опций, которые могут помочь в данной ситуации. Если ваши усилия не дадут результата, всегда можно рассмотреть альтернативные браузеры, такие как Firefox или Opera, которые, как вы уже заметили, корректно работают с вашими задачами.