Next.js
でWebSocketを使ったリアルタイム通信
WebSocketは、クライアントとサーバー間で双方向のリアルタイム通信を可能にするプロトコルです。Next.js
では、Socket.ioやネイティブWebSocket APIを利用して、リアルタイムのチャットや通知機能を実装することができます。ここでは、Next.js
とWebSocketを統合し、リアルタイム通信を実現するための基本的な手順を説明します。
WebSocketのセットアップ
Next.js
でWebSocketを使うには、サーバーを構築し、クライアントからの接続を管理します。ws
ライブラリまたはSocket.io
を利用して簡単にセットアップできます。以下は、Node.jsのws
を使った基本的なWebSocketサーバーの例です。
// server.js
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
});
このサーバーはクライアントと接続し、メッセージを受信してログに出力し、応答を返します。
Next.js
でのクライアント側WebSocket接続
Next.js
でWebSocketクライアントを設定するには、useEffect
フックを使って、ページコンポーネントがマウントされたときにWebSocket接続を確立し、アンマウント時に切断します。
import { useEffect, useState } from 'react';
export default function Chat() {
const [messages, setMessages] = useState([]);
useEffect(() => {
const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = (event) => {
setMessages((prevMessages) => [...prevMessages, event.data]);
};
return () => {
socket.close();
};
}, []);
return (
<div>
{messages.map((msg, index) => (
<div key={index}>{msg}</div>
))}
</div>
);
}
このコードでは、クライアントがWebSocketサーバーに接続し、メッセージを受け取ってリアルタイムに表示します。
Socket.ioの利用
Socket.ioを使うと、WebSocketよりも柔軟にリアルタイム通信が行えます。Socket.ioには再接続機能やメッセージのブロードキャストといった機能が含まれており、より堅牢なリアルタイムアプリケーションを構築できます。 まず、Socket.ioをインストールします。
npm install socket.io
次に、Next.js
のserver.js
でSocket.ioサーバーをセットアップします。
// server.js
const { Server } = require("socket.io");
const io = new Server(server);
io.on('connection', (socket) => {
console.log('Client connected');
socket.on('disconnect', () => {
console.log('Client disconnected');
});
socket.on('broadcastMessage', (message) => {
io.emit('serverMessage', message);
});
});
このサーバーは、クライアントから受け取ったメッセージをすべての接続クライアントにブロードキャストします。
まとめ
Next.js
とWebSocketの組み合わせにより、リアルタイムアプリケーションを簡単に構築できます。WebSocketを使えば、チャットや通知システム、共同作業ツールなど、ユーザーに即時フィードバックを提供する機能が実現します。また、Socket.ioを利用することで、接続の安定性や機能が向上し、より堅牢なアプリケーションを構築することができます。
次は、これを活用してリアルタイムで動作するアプリを作り、ユーザー体験を向上させましょう。