HOME/collection/

DenoでSocket通信

Article Outline

Denoを使ってSocket通信の実装

Server側 (server.ts)

import { encode } from "https://deno.land/[email protected]/encoding/utf8.ts";

const listener = Deno.listen({
  port: 50000,
});

for await (const conn of listener) {
  const data = encode("Hello World");
  await conn.write(data);

  conn.close();
}

Deno.listenを呼ぶだけでSocketの作成からポートの確保までやってくれます。

ありがたい。。

for-awaitでコネクションの数だけ処理を回します。

コネクションが来ればエンコードしたデータをクライアントに送信して、ソケットを閉じます。

Client側 (client.ts)

import { decode } from "https://deno.land/[email protected]/encoding/utf8.ts";

const conn = await Deno.connect({
  port: 50000,
});

let buffer = new Uint8Array(1024);

const count = await conn.read(buffer);

if (count) {
  console.log(decode(buffer.subarray(0, count)));
}

Deno.connectでソケットの作成からサーバーへの通信までやってくれます。

readでサーバーからのデータをバッファーに入れます。

readはPromiseで 受け取った文字数 l null を返すので条件分岐してあげれば良いです。

実行

$ deno run --allow-net server.ts
$ deno run --allow-net client.ts

まとめ

Denoの標準ライブラリだけでソケット通信の実装ができました。

C言語やPythonに比べて簡単に記述ができます。嬉しい。