0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node.js と ws でシンプルな WebSocketサーバー: Bufferオブジェクトで受けとった文字列データを UTF-8 の文字列にする

Last updated at Posted at 2024-10-13

はじめに

Node.js で下記の ws を使い、でシンプルな WebSocketサーバーを使う時の話です。

過去にも、その内容の記事を書いていたのですが、今回は Bufferオブジェクトで受けとった文字列を扱う話に関わる、シンプルな内容です。

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

背景の補足

とあるハッカソンで、WebSocket を使った PC とスマホ・ガジェット等を連動させる通信処理を実装しようとした時に、特定の複数の文字列をキーに、複数の動作を行わせることをやろうとしました。

そのテスト実装をした時、「文字列を送信する側が Bufferオブジェクトでデータを送る形」で、「受信側では、文字列変換した内容を扱いたい」という状況があってやった内容です。

実装内容

以下が本題です
今回、以下では、WebSocketサーバーの機能がある受信側の実装(かなりシンプルなもの)を示します。

npm i ws でパッケージをインストールして、下記のプログラムを作り、nodeコマンドで動かします(接続は、例えば localhost のポート番号 8080 になる形)。

const WebSocket = require("ws");

const wss = new WebSocket.Server({ port: 8080 });

wss.on("connection", (ws) => {
  console.log("クライアントが接続しました");

  ws.on("message", (message) => {
    // console.log("受信したメッセージ:", message);
    // 受信したBufferをUTF-8で文字列に変換
    const textMessage = message.toString("utf-8");
    console.log("受信したメッセージ:", textMessage);
  });

  ws.on("close", () => {
    console.log("クライアントが切断されました");
  });
});

console.log("WebSocketサーバーがポート8080で稼働中...");

const textMessage = message.toString("utf-8"); という部分の中で、「toString()」を使った UTF-8 の文字列への変換がポイントです。

●Object.prototype.toString() - JavaScript | MDN
 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

上記のコードでコメントアウトしている // console.log("受信したメッセージ:", message); を有効にして、送信側から「1」という文字列を Bufferオブジェクトで送った時の出力が以下となります。

image.png

出力を見ると、受けとった Bufferオブジェクトがそのまま出力された後、文字列に変換された後の出力も行われていること(UTF-8 で数字の「1」を示す「31」と、toString() で処理した後の文字列「1」が出力されていること)が確認できました。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?