第15回の勉強会についてNodeの基本的な操作ElixirでのNode間通信を行う基本的な操作はプログラミングElixirの第15章にまとめられている。Nodeに関するコマンド処理を覚えておこう。複数のNodeを識別する必要があるためNodeに名前を付けてあげよう。名前を付ける際はiexの起動時に--snameというオプションを付与して以下のように起動する。Node.self():"node1@okabe-y"これでNodeへの名前付けと自身の名前の確認が出来るようになった。次にもう1つターミナルを用意して、別のNodeを立ち上げてみる。node2:iex(node2@okabe-y)1>次に、この用意した2つのNodeを実際に繋げてみる。いっても、やり方は凄く簡単で自身のNodeに接続させてやりたいNodeの情報をNode.connect()/1を通して渡してやるだけだ。今回はnode1に対してnode2を接続させてみよう。Node.self():"node2@okabe-y"次に、node1のターミナルで先ほど確認したnode2の情報を用いて、実際にNodeを接続させる。Node.connect(:"node2@okabe-y")trueついでに自身のNodeに今、どのNodeが接続しているのかを確認しておこう。Node.list()[:"node2@okabe-y"]無事に、先ほどの接続が完了していることが確認出来たチャットサーバーの用意ベースに使用しているのは先ほど紹介させて頂いた記事だが、せっかくなのでチャットルームの概念をサーバーに用意してみた。endendまずはチャットサーバーで扱うクライアントのデータの構造をstructを用いて定義している。nilend次にメインとなるチャットサーバーの実装がChatServerモジュールに記述してある。現在チャットサーバーに接続しているクライアントの情報(誰がどこのルームに参加しているか)を返すまた、start()を呼び出すことで、メッセージ受信用のプロセスを新規で立ち上げて、:global.register_nameを使って、接続しているNode間で立ち上げた新規のプロセス情報を共有する。これはメッセージをメッセージ受信用のプロセスに送信するために行なっている(sendはPIDを指定する必要があるため)そして、最後にクライアントがメッセージを送信するためのモジュールがClientになる。それぞれの関数はsend構文をwrapして、関数単位で処理が出来るようにしているだけなので、実装しなくても同様の処理は行えるが、楽にメッセージを送信するために実装したメッセージを送ってみる先ほど実装したコードを適当なファイル名を付けてiexを実行したパスに配置しよう。僕は適当にmessage_server.exという名前を付けた。ClientInfo]node1をメッセージ受信に用いて、node2からメッセージを送ってみる。node1でチャットサーバーを起動する。その前にNode.list()を確認して、node1にnode2が接続していることを確認しておこう。Elixirを朝まで語る部屋せっかくなのでもう1つNodeを追加して、よりチャットっぽさを出してみよう。今回のNode間通信は同一のホストで行なっただけで、まだNode間通信の真髄を味わったわけではない。それにチャットサーバーもクライアント管理が適当であったり、認証がなかったり、データ構造がいまいちだったりと改善の余地が山ほどある。13:30【第15回清流elixir+fukuoka.exもくもく勉強会】Elixirでチャットサーバーを作りながらNode間通信を試すTweet関連記事2019-12-04Elixrのプロセスとは一体何なのか。プログラミングErlang7章を読んで。Elixrのプロセスとは一体何なのか。週間)「俺また、やっちゃいました?(致命的バグ)」なろう系23歳の非異世界転生なWeb系Developer。Elixirという言語を推し中。清流elixir運営してます。紅茶の勉強を始めたり、チャリを買おうとして買わなかったりと興味が分散しがち。今は、並行コンピューティングに強めの興味があります。(2)月別アーカイブ広告はてなブログをはじめよう!takamizawa46さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。