fukke.cafe

DenoでSocket通信

Denoを使ってSocket通信の実装

Server側 (server.ts)

import { encode } from "https://deno.land/std@0.82.0/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/std@0.82.0/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に比べて簡単に記述ができます。嬉しい。

公開日 2020/12/28

目次

Thanks you for reading.