Как передавать данные между приложения.
В общем есть демон и есть другая прога, которая будет передать данные демону, а он ей. Приложения обмениваются текстовыми и бинарными данными во много потоков.
- socket
- fifo
- pipe
- разделяемая память
- семафор
- другой?
В какие случаях использовать каждый из вариант. И какой вариант лучше всего подойдет мне? Почему?
Склоняюсь к использованию сокета, т.к считаю, что в других вариантах нужны будут блокировки. Также хочу сказать, что демон очень медленно обрабатывает данные и не хочется тратить время на tcp socket, то есть придется писать через udp, что может привести к потерям.
Данные то как через семафор передавать? Азбукой Морзе? 🙂 Семафор как средство синхронизации при обмене данными через разделяемую память/файловую систему.
Какое время тратится на tcp-сокет я не понял, с ним же можно работать в неблокирующемся режиме.
Универсального решения нет, но если в последствии нужно будет, чтобы это работало на разных серверах, то, тогда сетевые сокеты (tcp), если данные могут обратыватся повторно, то разделяемая память. pipe и fifo по сути одно и достаточно блико к сокету, поэтому, ИМХО, сначала определите разделяемая память или сокет, а уже потом дальше.
о tcp я имел ввиду 3 запроса (передача, подтверждения).
unix domain socket для клиентов на том же хосте, для всего остального tcp. это, наверное, самое универсальное решение.
fifo — надо самому городить двусторонню связь между процессами pipe — удобно только для связи процессов подитель-потомок shared memory — нужна синхронизация semaphore — штоа?
unix domain socket значительно быстрее чем tcp socket, умеет как в stream, так и dgram.
повторно данные обрабатываться не могут. Пользователю нужно запретить ставить демон на другой машине и подключатся к ней, т.к тогда смогут подключатся и другие пользователи. Нужно сколько пользователей сколько и машин.
Если ли сокеты, которые работают на одной машине и не могут подключатся к другим даже в рабочей сети?
Именованные каналы в Linux
Именованный канал — один из методов межпроцессного взаимодействия. Он позволяет различным процессам обмениваться данными, даже если программы, выполняющиеся в этих процессах, изначально не были написаны для взаимодействия с другими программами.
Именованный канал создаётся явно с помощью mknod или mkfifo, и два различных процесса могут обратиться к нему по имени.
Например, можно создать канал и настроить gzip на сжатие того, что туда попадает:
Что такое файлы именованных каналов?
Специальные файлы, которые могут быть расположены в любых точках файловой системы, предназначены для обмена данными между приложениями (или в рамках одного приложения) и представляют собой буферы в памяти, поддерживающие операции чтения и записи с блокировками.
Для создания файлов именованных каналов можно использовать утилиту mkfifo:
Что такое файлы устройств?
Тип файлов в UNIX-подобной ОС, содержат данные, необходимые операционной системе для взаимодействия с физическими устройствами, такими как диски и дисководы, принтеры и факсы и т. п.
Каждый из таких файлов идентифицируется с помощью двух идентификаторов: основного идентификатора (major number) и вспомогательного идентификатора (minor number).
Файлы устройств размещаются в каталоге /dev или в его подкаталогах. Примеры основных файлов:
/dev/sd[буква][номер] — раздел диска
/dev/eth[номер] — сетевые интерфейсы Ethernet
Узнать информацию о файле устройства можно с помощью команд file и ls.
Создание файла именованного канала
Для создания файла именованного канала достаточно использовать утилиту mknod с параметром p.
mknod -m 777 /home/name/fifo p
Чтобы проверить создание файла именнованного канала:
Для прекращения работы с файлом именованного канала достаточно использовать команду rm:
Передаем данные через именованный канал
Для передачи данных через именованный канал, в первую очередь, создаем этот канал с помощью команды mkfifo:
Для проверки, что канал создан, воспользуйтесь:
Для обмена данными между приложениями следует открыть дополнительное окно эмулятора терминала и выполнить в нем команду:
Далее с помощью первого окна терминала выполнить:
Во втором окне, вы должны увидеть:
Прервать работу Ctrl+C. А после окончания использования файла программного канала следует удалить его:
Правила сообщества
Просьба уважать друг друга.
Всегда создавал каналы с помощью |
В тексте не указано, когда имеет смысл использовать такие каналы.
Для обмена данными между приложениями следует открыть дополнительное окно эмулятора терминала и выполнить в нем команду:
tail -f /tmp/my.fifo
Далее с помощью первого окна терминала выполнить:
echo «Linux» >> /tmp/my.fifo
Чем это отличается от обычной записи в файл, например, txt?
Сетевая подсистема не работает через файлы устройств в /dev, другими словами у сетевых интерфейсов нет никаких файлов
DOCKER БЫТОВОЙ УРОВЕНЬ
Привет! Это небольшой гайд для новичков в Docker, который должен помочь тебе начать пользоваться докером!
Мой план-лист по бесплатным IT курсам и ресурсам
В посте про «наставление» накидали кучу годноты + в телегу.
По всему этому я пройдусь, буду иногда постить об успехах.
Некоторые глянул мельком. Поэтому если там есть продукт-плейсмент — отпишите и я удалю. На первый взгляд очень даже хорошо. Искал с нуля т.к. лучше повторить, чем вспоминать и ошибиться.
Первое я уже успел попробовать (находил сам), прохожу в текущий момент.
Stepik — python для начинающих
Если что-то хотите предложить — пишите в комментарии.
UPD: даже в начале написал, что я не в курсе ни о какой рекламе на тех ресурсах. И первый же начал разводить вонь о том, что я продажный и сайт вообще мой. Ууух я конечно злой гений.
Предлагайте ваши варианты, что сами пробовали. Обязательно попробую.
UPD2: я без понятия почему «это» вылетело в горячие. Не бейте блин тапком.
Ответ UehalVOmsk в «О собеседованиях на 700к/месяц»
Я одно время (около года) проводил тех собесы для расширения фронт команды, искали мидл+. Кандидаты были максимально разношерстые, ну и я сам попроходил очень много собесов за свою рабочую жизнь (каждая смена работы выходила в пару тройку недель по 2-3 собеса ежедневно)
Для тех, кто удивляется, почему вопросы одни и те же для джуна \ мидла \ сеньора и для разных уровней зп вот ответ:
1) Первичный отсев. Это базовые вопросы, 90% которых встречается в работе. Я принимал как технически верные ответы как по документации, так и в свободной форме верно описанные. Но и на этом валилось где то 40% кандидатов. Видимо из разряда «попробую пройти на шару». Технически не грамотные, с плавающими знаниями, некоторые и с подсказками не отвечали на вопрос
2) Проверка софт скилов, как общается кандидат, как быстро оперирует знаниями в голове, не валится ли от каверзных вопросов, выражается ли чисто по документации или объясняет более понятно своим языком. Тут отсевались люди, которые слабо могли коммуницировать (долго мямлили, на очень долгое время замолкали, сквернословили (были и такие, что было шоком для меня), всякие побратимушки тоже были, те, кто быстро начинал переходить на агресивный тон. На той работе были крупные созвоны, где были и менеджеры и бизнес представители, в корпоративную этику такие кандидаты бы не вписались
3) На части написания кода смотрелось на то, как быстро, насколько чисто пишется код, рассуждает ли кандидат вслух (Была просьба рассуждать вслух и описывать свои действия). Рефакторит ли свой код кандидат по ходу написания. Задачи я составил свои, связанные как с базовыми вопросами js и react, так и обезличенные рабочие задачи. Все это так же помогало в
выявлении степени подготовки кандидата.
По итогам собеседования я писал короткое ревью о кандидате, минусах плюсах и передавал дальше HR’ам
По итогу за год было отобрано 4 кандидата, один из которых очень быстро слился в неизвестном направлении, бросив важную задачу, которую как оказалось он не сделал. До сих пор не понимаю, что это было, то ли как то за него рядом проходили задачи, то ли какие то жизненые проблемы случились.
Было это около 3х лет назад, позиция мидл+ реакт фронт, зп 3к$