엘릭서 젠서버?

Primeiramente, oi 👋 나는 Willian, sou desenvolvedor e simpto usar esse espaço para compartilhar o pouco que aprendi durante esses últimos anos trabalhando com TI. Se você é pessoa desenvolvedora back-end e/ou está semper procurando atualizações, novas tecnologias ou novos conhecimentos, esse texto é para você!

Bom, vem comigo.



엘릭서



Se você ainda não conhece a linguagem de programação Elixir, vou deixar alguns link abaixo que thinko como sendo os de maior influência para te dar uma leve noção de sintaxe e semântica, porém nada muito profundo, para não te sobrecarregar. 😄

연결:
https://elixir-lang.org/
https://elixirschool.com/pt

Além disso, postar mais conteúdos sobre e garantir que seja possível acompanhar essa tecnologia, e entender como ela pode funcionar (ou não) para você!

젠서버


O que seria isso?



Ele é um dos modulos que compõem o pacote OTP (Erlang/BEAM) . É possível acessar ele a partir do Elixir graças a interoperabilidade que a linguagem oferece.

Diz-se que o GenServer é um tipo de processo, assim como os demais processos que podem ser gerados no Elixir (예: Agent , Task ). O seu diferencial é que os processos que são criados a partir de sua implementação possuem um estado interno; em outras palavras, você pode criar um processo que roda como um servidor à parte, de forma assíncrona, sem interferir na sua aplicação principal, e esse processo terá um estado interno que poderá ser alterado da forma que for mais adequado para suas necessidades.

치클로 데 비다



GenServer는 다음과 같은 기능을 수행합니다. 시작 -> 루프(chama uma função -> gera um novo estado).

전:
다음과 같이 GenServer를 사용할 때 사용할 수 있습니다.



Stack.start()를 시작하려면 먼저 시작해야 합니다.

추가 요소 및 제거 요소 활용 방법:

stack.push(value) # value = valor que você deseja adicionar.
stack.pop() # retorna o valor que está no topo da pilha.

Os métodos push/1 e pop/0 se encaixam no loop citado acima, onde você está chamando uma função e atualizando o estado interno do seu GenServer.

⚠️ Lembrando que essa pilha irá executar o push/1 de forma assíncrona por ser implementada usando o método handle_cast .

Exemplo implementação de 필하



Seguindo no exemplo do tópico anterior, se estivesse implementando uma pilha, você iria neste caminho:

defmodule Stack do
  use GenServer

  # {...} Outras implementações como init, start_link, etc...

  def handle_call(:pop, _from, [value | state]), do: {:reply, value, state}
  def handle_call(:pop, _from, []), do: {:reply, nil []}

  def handle_cast({:push, value}, state), do: {:no_reply, [value | state]}

  def push(value), do: GenServer.cast(__MODULE__, {:push, value})
  def pop(), do: GenServer.call(__MODULE__, :pop)
end


E isso rodaria mais ou menos assim:


Curiosidades



O Discord Elixir를 사용하면 GenServer를 사용하여 기존 문제를 해결할 수 있습니다. Um bom exemplo disso é a implementação de semaphores que foi feito para tratar o gerenciamento dos processos, 링크: https://github.com/discord/semaphore .

지금까지 라이브러리는 GenServer를 활용하기 위해 Elixir 환경을 보호하기 위해 존재했으며, 예를 들어 이 라이브러리를 사용하기 위해kafka_ex, 서비스를 사용하기 위해 연결해야 합니다Apache Kafka.

결론



O GenServer é muito utilizado no dia-a-dia de um desenvolvedor Elixir, asé mesmo de forma inconsciente (em libs, frameworks, etc). Por isto, é semper bom conhecer e saber que ele existe e como ele funciona por baixo dos panos.

Deixarei aqui um repositório com algumas implementações básicas de estruturas de dados:


WLSF / data_structures_ex


Elixir GenServer를 사용하여 데이터 구조를 구현하기 위한 Repo





GenServer(Elixir) 사용에 대한 평가


Ex de como 집행자:
iex
$ Stack.start_link
$ Stack.push 10
$ Stack.pop
-> 10
텍스트 저장소:


View on GitHub


Por hoje é só, até a próxima... 👋

좋은 웹페이지 즐겨찾기