Вопрос

У меня есть ситуация, когда мне нужно отправлять команды в работающее приложение 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 в этом сценарии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top