Socket.ioでコンソールベースのチャットを作ってみる


Socket.IOの勉強がてら、よくある簡単なチャットを作ってみた。
Socket.IOのドキュメントや色々な記事ではブラウザベースのチャットの例が多いが、今回はコンソールベースのチャットを作った。

サーバの実装

const io = require('socket.io')();
io.listen(3000);

io.on('connection', (socket) => {
  console.log(`connected, id: ${socket.id}`);

  socket.on('chat message', (user, message) => {
    data = `${message} from ${user}`;
    console.log(data);
    socket.broadcast.emit('chat message', data);
  });

  socket.on('disconnect', () => {
    console.log(`disconnected, id: ${socket.id}`);
  });
});

クライアントの実装

const readline = require('readline');
const socket = require('socket.io-client')('http://localhost:3000');

const user = process.argv[2];

rl = readline.createInterface(process.stdin, process.stdout);
rl.setPrompt('');

rl.on('line', (line) => {
  socket.emit('chat message', user, line);
})
.on('close', () => {
  process.exit(0);
});

socket.on('connect', () => {
  console.log(`connected, id: ${socket.id}`);
});

socket.on('chat message', (data) => {
  console.log(data);
});

socket.on('error', (err) => {
  console.log('Error:', err);
});

socket.on('disconnect', () => {
  console.log('disconnected');
});

サーバ起動

$ node index.js

クライアント起動

$ node client.js $USER_NAME

サーバはメッセージをブロードキャストするようにしているので、クライアントを複数起動すれば、チャットみたいなことができる。