-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
update GenServer #15
update GenServer #15
Conversation
mix-otp/genserver.md
Outdated
|
||
# {{ page.title }} | ||
|
||
{% include toc.html %} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Эту строку нужно убрать, у нас нет этого меню
mix-otp/genserver.md
Outdated
|
||
{% include toc.html %} | ||
|
||
{% include mix-otp-preface.html %} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это тоже нужно убрать
mix-otp/genserver.md
Outdated
|
||
{% include mix-otp-preface.html %} | ||
|
||
В [предыдущей главе](/getting-started/mix-otp/agent.html) мы использовали агенты(agents) чтобы представить наши корзины(buckets). В первой главе мы указали имя каждой корзины, поэтому мы можем сделать следующее: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Перед открывающимися скобками должны быть пробелы
mix-otp/genserver.md
Outdated
OK | ||
``` | ||
|
||
Поскольку агенты процессы, каждая корзина имеет идентификатор процесса (PID), но не имеет названия. Мы узнали об регистрации имени [в главе Процессы](/getting-started/processes.html) и вы могли бы решить эту проблему с помощью такой регистрации. Например, мы могли бы создать корзину так: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Между "агенты" и "процессы" в начале нужно тире
"о регистрации" вместо "об"
mix-otp/genserver.md
Outdated
Тем не менее, это ужасная идея! Имена Процессов в Эликсире должны быть атомами, это означает, что мы должны преобразовать имя корзины (часто получаемое из внешнего клиента) в атомы, **мы никогда не | ||
должны преобразовывать ввод пользователя в атомы**. Сборщик мусора не уничтожает атомы.Генерация атомов из пользовательского ввода может привести к исчерпанию Системной памяти! | ||
|
||
На практике скорее всего, вы достигнете предела максимального количества атомов для Виртуальной Машины Эрланга и ваша система упадет в любом случае. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"скорее всего" выделяется запятыми с обеих сторон
"и ваша" два пробела, перед "и" нужна запятая
mix-otp/genserver.md
Outdated
|
||
## `call`, `cast` или `info`? | ||
|
||
До сих пор мы воспользовались тремя коллбэками: `handle_call/3`, `handle_cast/2` и `handle_info/2`. Вот что мы должны учитывать при |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В конце этой строки перевод каретки лишний
"Вот, что мы должны" нужна запятая
mix-otp/genserver.md
Outdated
|
||
1. `handle_call/3` должен быть использован для синхронных запросов. Он должен быть выбором по умолчанию в ожидании ответа сервера и является полезным механизмом противодавления. | ||
|
||
2. `handle_cast/2` должен быть использован для асинхронных запросов, когда ты не заботишься об ответе. Бросок не дает гарантии что сервер получил сообщение и, по этой причине, его следует использовать с осторожностью. Например, функция `create/2`, которую мы определили в этой главе должна использовать `call/2`. Мы использовали `cast/2` для обучающих целей. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"которую мы определили в этой главе должна" запятая перед "должна"
mix-otp/genserver.md
Outdated
|
||
2. `handle_cast/2` должен быть использован для асинхронных запросов, когда ты не заботишься об ответе. Бросок не дает гарантии что сервер получил сообщение и, по этой причине, его следует использовать с осторожностью. Например, функция `create/2`, которую мы определили в этой главе должна использовать `call/2`. Мы использовали `cast/2` для обучающих целей. | ||
|
||
3. `handle_info/2` должен использоваться для всех других сообщений, которые сервер может получать и не передаются через `GenServer.call/2` или `GenServer.cast/2`, включая регулярные сообщения `send/2`. Мониторинг cообщений `:DOWN` как раз такой пример. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
":DOWN
как" тут тире перед "как", подлежащее и сказуемое - существительные
mix-otp/genserver.md
Outdated
|
||
Ранее мы узнали о связях в [главе Процессы](/getting-started/processes.html). Теперь, с полным завершением реестра, вам может быть интересно: когда мы должны использовать мониторы и когда следует использовать ссылки? | ||
|
||
Ссылки двунаправлены. Если вы связываете два процесса и один из них выйдет из строя, другая сторона тоже выйдет из строя (если только это не улавливает флаг trapping exits true). Монитор является однонаправленным: процесс мониторинга будет только получать уведомления о контролируемом. Другими словами: используйте ссылки, когда вы хотите получить связанные сбои, и мониторьте за процессами, когда вы просто хотите получать информацию о сбоях, выходах и т.д. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"два процесса и один из них" запятая перед "и"
"если только это не улавливает флаг trapping exits true" -> "если только не установлен флаг trapping exits true"
"мониторьте за процессами" -> "мониторьте процессы"
mix-otp/genserver.md
Outdated
ref = Process.monitor(pid) | ||
``` | ||
|
||
Это плохая идея, так как мы не хотим, чтобы реестр падал при сбое корзины! Мы обычно избегаем непосредственного создания новых процессов, вместо этого мы делегируем эту ответственность супервизорам. Как мы увидим в следующей главе, супервизеры полагаются на ссылки, и это объясняет, почему API-интерфейсы на основе ссылок (`spawn_link`, `start_linkи` т. д.) Настолько распространены в Эликсире и <abbr title="Open Telecom Platform">OTP</abbr>. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Настолько" с маленькой буквы
"ОТП" ранее было русскими, тут "OTP". Думаю, стоит везде использовать один вариант, и в случае кириллицы расшифровку также давать на русском, "открытая телекоммуникационная платформа"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"start_linkи" тут русская "и" затесалась
@rtrv титаническая работа! |
@Zabalkanskiy спасибо за перевод, отличная работа, только мелочи поправить. Пожалуйста, отписывайся в #6 когда начинаешь перевод какого-то раздела, чтобы не возникло коллизий |
mix-otp/genserver.md
Outdated
{% include mix-otp-preface.html %} | ||
|
||
В [предыдущей главе](/getting-started/mix-otp/agent.html) мы использовали агенты(agents) чтобы представить наши корзины(buckets). В первой главе мы указали имя каждой корзины, поэтому мы можем сделать следующее: | ||
В [предыдущей главе](/getting-started/mix-otp/agent.html) мы использовали агенты (agents) чтобы представить наши корзины (buckets). В первой главе мы указали имя каждой корзины, поэтому мы можем сделать следующее: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вероятно забыл указать в прошлый раз, перед "чтобы" сразу после закрывающейся скобки нужна запятая
mix-otp/genserver.md
Outdated
@@ -22,7 +18,7 @@ GET shopping milk | |||
OK | |||
``` | |||
|
|||
Поскольку агенты процессы, каждая корзина имеет идентификатор процесса (PID), но не имеет названия. Мы узнали об регистрации имени [в главе Процессы](/getting-started/processes.html) и вы могли бы решить эту проблему с помощью такой регистрации. Например, мы могли бы создать корзину так: | |||
Поскольку - агенты процессы, каждая корзина имеет идентификатор процесса (PID), но не имеет названия. Мы узнали об регистрации имени [в главе Процессы](/getting-started/processes.html) и вы могли бы решить эту проблему с помощью такой регистрации. Например, мы могли бы создать корзину так: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут тире между "агенты" и "процессы"
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"об регистрации" -> "о регистрации"
mix-otp/genserver.md
Outdated
|
||
Вместо того, чтобы злоупотреблять регистрацией имени объекта, мы создадим процесс регистрации, который содержит карту(map), которая связывает имя корзины с процессом корзины. | ||
Вместо того, чтобы злоупотреблять регистрацией имени объекта, мы создадим процесс регистрации, который содержит мэп, который связывает имя корзины с процессом корзины. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Обсуждали потом в комментах, что map всё-таки переводим как "словарь", дальше не пишу по этому поводу
mix-otp/genserver.md
Outdated
@@ -196,7 +191,7 @@ iex> flush() | |||
|
|||
Обратите внимание, `Process.monitor(pid)` возвращает уникальную ссылку, что позволяет нам мониторить выходящие сообщения процесса. После того, как мы остановили агента, мы можем при помощи `flush/0` посмотреть все консольные сообщения и обратите внимание, что `:DOWN` сообщение прибыло, с точной ссылкой, возвращенной монитором, указывающией, что процесс завершен корзиной с причиной `:normal`. | |||
|
|||
Давайте переопределим коллбэки сервера, чтобы исправить баг и пройдем тест. Вопервых, мы изменим состояние GenServer используя два словаря: один, будет содержать `name ‐> pid` и другой, содержит `ref ‐> name`. Затем нам нужно мониторить корзины при помощи `handle_cast/2`, а также реализовать функцию коллбэков `handle_info/2` для обработки мониторинга Сообщений. Полное выполнение коллбэков сервера показано ниже: | |||
Давайте переопределим коллбэки сервера, чтобы исправить баг и пройдем тест. Во-первых, мы изменим состояние GenServer используя два словаря: один будет содержать `name ‐> pid` а другой `ref ‐> name`. Затем нам нужно мониторить корзины при помощи `handle_cast/2`, а также реализовать функцию коллбэков `handle_info/2` для обработки мониторинга Сообщений. Полное выполнение коллбэков сервера показано ниже: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"один будет содержать name ‐> pid
а другой ref ‐> name
" -> "один будет содержать name ‐> pid
, а другой - ref ‐> name
". Не хватает запятой и тире
mix-otp/genserver.md
Outdated
@@ -234,20 +229,19 @@ def handle_info(_msg, state) do | |||
end | |||
``` | |||
|
|||
Заметим, что нам удалось значительно изменить реализацию сервера, без изменения каких либо API клиента. Это одно из преимуществ четкого разделения на серверную и клиентскую части. | |||
Заметим, что нам удалось значительно изменить реализацию сервера без изменения каких либо API клиента. Это одно из преимуществ четкого разделения на серверную и клиентскую части. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"каких-либо" через дефис
No description provided.