はじめに
JavaScriptアプリケーションで簡易的にサーバに接続して状況確認する機能を実装できるか検討する必要があり、調査したところNode.jsのnet
ライブラリを使用することで実現できそうなことが分かった。
しかし、サンプルコード等を調べてみるとクライアントとサーバ間で複数回会話するものはなかった。
そこで、試行錯誤して開発してみた。
サンプルコード
サーバアプリケーションとクライアントアプリケーションを開発した。
サーバアプリケーション
サーバアプリケーション
const net = require('net');
const sever = net.createServer(socket =>{
socket.on('data', data => {
console.log(data + ' from ' + socket.remoteAddress + ":" + socket.remotePort);
socket.write('Echo: ' + data);
});
socket.on('close', () =>{
console.log('Client closed connection');
});
}).listen(3000);
console.log('Listening port is 3000');
サーバアプリケーションは、クライアントから送られたメッセージの先頭に「Echo:」を付けて返却するECHOサーバとなっている。
クライアントからの待ち受けポートは3000
番としている。
クライアントアプリケーション
クライアントアプリケーション
const { write } = require('fs');
const net = require('net');
let i = 0;
const client = net.connect('3000', 'localhost', ()=>{
console.log('connected to server');
client.write('Hello Server!');
i++
});
client.on('data', data => {
console.log('Received: ' + data)
if(~data.indexOf("!")){
console.log("continue")
sendMessage(data)
}else{
console.log("break")
client.end()
}
});
function sendMessage(data) {
switch(i){
case 1:
client.write("second")
i++
break;
case 2:
client.write("See you")
i++
break;
default:
client.end()
}
return 0
}
client.on('end', () =>{
client.destroy();
});
client.on('close', () => {
console.log('Connection is closed')
});
サーバへメッセージ送信した回数をカウントアップして、回数によって送信するメッセージを変えている。
サーバから受信したメッセージの内容を受けて、メッセージを返すようにしている。
サーバから返ってきたメッセージの中に「!」が含まれていない場合は、サーバとの通信を切るようにした。
そのため、サンプルコードは2回目のメッセージを受信したところで通信を終了するようになっている。
実行結果のログは、次のようになる。
サーバ側
$ node app.js
Listening port is 3000
Hello Server! from ::1:{$YOUR PORT}
second from ::1:{$YOUR PORT}
Client closed connection
クライアント側
$ node app.js
connected to server
Received: Echo: Hello Server!
continue
Received: Echo: second
break
Connection is closed
リポジトリ