LoginSignup
1
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Node.js と ws でシンプルな WebSocketサーバー + Node.js v22 でフラグなしで使える WebSocket

Last updated at Posted at 2024-06-18

はじめに

以前から利用している「ws」と、Node.js v22 でフラグなしで使えるようになった WebSocket を組み合わせる話です。

ws

以下の ws は WebSocketサーバーを準備するのに使います。

●ws - npm
 https://www.npmjs.com/package/ws

image.png

Node.js v22 で WebSocket利用

Node.js v22 でフラグなしで使える WebSocket は、以下に書かれているものです。

●Node.js — Node.js 22 is now available!
 https://nodejs.org/en/blog/announcements/v22-release-announce#websocket

image.png

ブラウザと同様に、WebSocketサーバーに接続するクライアントを、簡単にプログラム内で使えるようになりました。

実際に試す

WebSocketサーバーを用意する

まずは WebSocketサーバーを用意します。

ws を npmコマンドでインストールし、以下の「Simple Server」の公式サンプルを参考に、WebSocketサーバーを準備します。

server.mjs
import { WebSocketServer } from 'ws';

const wss = new WebSocketServer({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('error', console.error);

  ws.on('message', function message(data) {
    console.log('received: %s', data);
  });

  ws.send('something');
});

上記は、ポート番号 8080 で待ち受けをして、クライアントとの接続が確立した際には、クライアントに対してメッセージ「something」を送ります。
それと、クライアントからメッセージが送られてきた際に、受けとったメッセージの内容を出力します。

クライアント側のプログラム

クライアント側のプログラムを準備します。

以下の、MDN のページのプログラムを使います。

●WebSocket - Web API | MDN
 https://developer.mozilla.org/ja/docs/Web/API/WebSocket

app.js
const socket = new WebSocket("ws://localhost:8080");

socket.addEventListener("open", (event) => {
  socket.send("Hello Server!");
});

socket.addEventListener("message", (event) => {
  console.log("Message from server ", event.data);
});

上記は、サーバーに接続をして、接続後に「Hello Server!」というメッセージを送ります。
それと、メッセージを受けとった時に、受けとったメッセージの内容を出力します。

動作確認

上記の両方のプログラムを動かし、動作確認を行います。
サーバーを先に動かし、その後にクライアント側を動かします。

以下の左のウィンドウがサーバー側、右側がクライアント側ですが、サーバーとクライアントとの間でメッセージのやりとりが問題なく行えるのを確認できました。

image.png

Node.js でフラグなしで WebSocket が使えるようになり、JavaScript での WebSocket の利用が、以前より一段と手軽になりました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0