Что такое хороший способ, чтобы написать какао переднего конца приложения Erlang?

голоса
13

Я изучаю возможность написания приложения в Erlang, но ему необходимо будет иметь часть написанный в какао (предположительно Objective-C). Я хотел бы передний конец и задний конец, чтобы иметь возможность легко общаться. Как это лучше сделать?

Я могу думать об использовании портов C и подключены процессов, но я думаю, что хотел обратную ситуацию (передний план запуска и подключение к фоновому). Там названы трубы (FIFO), или я мог бы использовать сеть связь через TCP-порт или именованный сокет BSD. Кто-нибудь есть опыт в этой области?

Задан 01/09/2008 в 01:22
пользователем
На других языках...                            


6 ответов

голоса
10

Один из способов будет иметь ядро ​​Erlang приложения будет демон, что какао передний конец взаимодействует с более чем сокет Unix-домена с помощью какой-то простой протокол, который вы изобрести.

Использование сокета Unix-домен означает , что демон Erlang может быть запущен по требованию со стороны launchdи какао переднего конца может найти путь к сокету для использования через переменное окружение. Это делает сближение между приложением и демоном тривиальным, и это также делает его просто разработать несколько фронтов-энды (или , возможно, рамочных , который оборачивает связь с демоном).

Mac OS X launchdсистема действительно охлаждаться таким образом. Если вы указываете , что работа должна быть начата по требованию через защищенный сокет Unix-домена, launchdбудет на самом деле создать сам сокет с соответствующими правами, и рекламировать его местоположение с помощью переменной окружения с именем в списке свойств задания. Работа, когда начался, на самом деле будет принят дескриптором файла в сокет с помощью , launchdкогда это делает простую регистрацию.

В конечном счете это означает , что весь процесс переднего конца открывая гнездо для связи с демоном, launchdзапуск демона, и демон в ответ на сообщение может быть безопасным, даже если передний конец и запустить демон на разных уровнях привилегий ,

Ответил 01/09/2008 в 02:11
источник пользователем

голоса
1

Обычно при создании Cocoa приложений, передний UNIX команды или другие обезглавленные программы вы используете NSTask:

Использование класса NSTask, ваша программа может запустить другую программу как подпроцесс и может контролировать выполнение этой программы. Объект NSTask создает отдельный исполняемый объект; она отличается от NSThread в том, что он не разделяет пространство памяти с процессом, который создает его.

Задача работает в среде, характеризуемой текущими значениями для нескольких деталей: текущий каталог, стандартный ввод, стандартный вывод, стандартная ошибка, и значения любых переменных окружения. По умолчанию объект NSTask наследует свою среду от процесса, который запускает его. Если есть какие-либо ценности, которые должны быть различными для выполнения этой задачи, например, если текущая директория должна измениться, необходимо изменить значение перед запуском задачи. среда Целевая не может быть изменена во время его работы.

Вы можете общаться с процессом бэкэнда путем stdin/ stdout/ stderr. Bascially NSTaskявляется оболочкой высокого уровня вокруг exec(или forkили system, я всегда забываю разницу).

Как я понимаю, вы не хотите, чтобы программа Erland быть фоном демоном , который работает непрерывно, но если вы делаете, пойти с @ Крисом внушения.

Ответил 01/09/2008 в 08:58
источник пользователем

голоса
2

Одним из способов является способ Тео с NSTask, NSPipe и NSFileHandle. Вы можете начать, глядя на код CouchDBX http://couchprojects.googlecode.com/svn/trunk/unofficial-binary-releases/CouchDBX/

Порты возможны, но не приятно на всех.

Есть ли какая-то причина, почему эта связь не может просто быть обработана с mochiweb и JSon связями?

Ответил 10/09/2008 в 14:44
источник пользователем

голоса
1

Штепсельный домен подходы NSTask и Unix являются большими предложениями. Что-то, чтобы следить является реализацией Erlang FFI это в работах:

http://muvara.org/crs4/erlang/ffi

Ответил 10/09/2008 в 14:49
источник пользователем

голоса
1

erl_call должны быть пригодными для использования в NSTask. Я использую его из команды Textmate и очень быстро. Сочетание erl_call с OTP gen_server позволит вам сохранить постоянное состояние бэкэнда с относительной легкостью. См мой пост на erl_call в моем блоге для более подробной информации.

Ответил 26/10/2008 в 13:09
источник пользователем

голоса
1

Использование NSTask вы можете также рассмотреть возможность использования PseudoTTY.app (что позволяет интерактивное общение)!

Другой пример код интереса может быть BigSQL, клиент PostgreSQL, который позволяет пользователю посылать SQL сервера и вывести результат.

open -a Safari http://web.archive.org/web/20080324145441/http://www.bignerdranch.com/applications.shtml
Ответил 22/09/2010 в 11:28
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more