новости сообщество форум вики
Erlang по-русски. Форум » Erlang »

Работа с портом

(4 posts)

  1. EvilBlueBeaver
    Участник

    Приложение разрабатывается в рамках OTP и ему требуется работать с портами ( в виде linked-in драйверов). Отсюда вытекает следующий вопрос. Если в методе handle_call gen_server'а после отсылки сообщения порту поставить receive, то мне кажется он должен будет перехватывать не только сообщения, идущие от порта, но также и сообщения, которые могут придти gen_server'у от вы?естоящих процессов. Если я прав, то есть ли какой-то красивый способ работы с портами в рамках OTP.

    Отправлено 1 год назад #
  2. Да, конечно receive будет пытаться перехватывать все сообщения. Селективный прием только сообщений от порта оставит все остальные сообщения в очереди. Но конечно это не соответствует OTP. Ресивы в нескольких местах - это как-то криво.

    Красивее к ген-серверу делать асинхронные обращения cast. В handle-cast ген-сервер пусть отправляет сообщения в порт. Прием данных из порта - через handle_info. ? соответственно асинхронный ответ из ген-сервера.

    Отправлено 1 год назад #
  3. EvilBlueBeaver
    Участник

    Что за селективный receive? Можете подсказать?

    Отправлено 1 год назад #
  4. Селективный - это когда стоят определенные ?аблоны приема и все. Типа такого:

    receive
    {Port, {port_answer, Data}} -> Actions
    end.

    Если придет сообщение, которое не удовлетворяет ?аблону, оно не будет обработано. А останется в очереди процесса.

    Отправлено 1 год назад #

RSS экспорт этой темы

Отправить сообщение

Вы должны войти в систему, чтобы оставлять сообщения.

 
 

так же

Популярные тэги



Currently online

No Members around.

twitter