Вопрос
У меня есть ситуация, когда мне нужно отправлять команды в работающее приложение Java, теперь я использую сокет tcp / ip для отправки команд в приложение с помощью пункта контекстного меню Internet Explorer. Но как только приложение запускается, антивирусные сканеры жалуются, что приложение начало прослушивать, хотя я слушаю только локальные соединения. Я думаю, что это может сбить с толку пользователей. Я смотрю на другие способы общения, не раздражая AV-сканеры?
Решение
Для этого лучше всего использовать файловую очередь FIFO. Или используя собственный доступ Java / собственный интерфейс Java для записи в NamedPipe или в общую память. Если вы идете по JNA / JNI-маршруту, вы можете создать Именованное событие . Р>
Но, вероятно, нет способа сделать то, что вы хотите, с какой-либо эффективностью, не идя по пути JNA / JNI. Р>
Другие советы
Вы можете использовать Расширения управления Java (JMX) выставлять методы в запущенном процессе через простой веб-интерфейс. Р>
Сокеты - довольно традиционный способ выполнения IPC, но если вы действительно хотите их избежать, вы могли бы найти обходной путь, используя локальный файловая система. Вы не захотите использовать стандартные операции чтения / записи файлов, поскольку вы, скорее всего, захотите эффективно реализовать очередь в файловой системе.
Если бы I собирался реализовать IPC через файловую систему, я бы, вероятно, использовал SQLite (, которая может быть поточно-ориентированной при компиляции) и иметь одну таблицу для каждого слушателя. Вероятно, я бы использовал таблицу из одного столбца для вставки сообщения, а слушатель просто вытащил бы строку с самым низким rowid , затем удалите указанную строку.
Но мой подход совсем не специфичен для Java, поэтому могут быть более эффективные способы сделать это с помощью Java (например, ответ @ darthcoder).
Многие люди используют что-то вроде JMS в этом сценарии.