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に比べて簡単に記述ができます。嬉しい。