AFAIK, нет никакого способа передать процесс между узлами erlang, и я могу придумать много причин, чтобы запретить это, между другими, которые вы можете связать с внутренней памятью узлов, просто рассмотрите процесс, который хранит данные (кроме внутренних).Состояние 'параметр цикла) в словаре процесса (куча процесса), двоичный файл (другой метод сбора мусора).
Одним из способов может быть предоставление gen_fsm / gen_server метода, который может порождать новый процесс, воссоздающий в то же времяВремя внутреннего состояния сервера / конечного автомата.Я думаю, что сложнее сказать, что для реализации вы могли бы просто использовать две функции запуска:
- , которая инициализирует поведение (как я думаю, вы делаете сейчас)
- тот, который также принимает узел и запускается через удаленный метод, вызывает сервер на этом узле и инициализирует состояние (с помощью функции init / 1 или явным образом, отправляя сообщение, то есть состояние сервера)
Но я должен сказать, что вижу здесь две основные проблемы:
- Синхронизация: необходимо убедиться, что процесс: запустить сервер на удаленном узле -> установить состояние удаленного сервера -> убить текущий локальный серверatomic
- Согласованность: другие процессы, ссылающиеся на локальный, должны переключать свои ссылки на удаленные
Первый может быть разрешен разными способами (мои два цента: явная передача сообщений междулокальный и удаленный сервер - накладные расходы, но пуленепробиваемые, учитывая систему времени исполнения Erlang), последняя может быть решена с помощью monitor / links и выхода return значения (pid удаленного сервера) или более элегантно с моделью публикации / подписки с процессом gen_event.
Надеюсь, вы найдете это полезным для решения вашей проблемы и спросите что-нибудь, если вам нужно!