Node.jsでゲームサーバーの環境を準備する
設計イメージ
前準備
NewProjectのディレクトリの直下にgame-serverのディレクトリを準備する
NewProject/ (全体のルート)
├── assets/
├── profiles/
├── scene-root/
│
└── game-server/
Node.jsをインストールする
- VS CodeでNewProjectを開き、ターミナルを起動する
- geme-serverのディレクトリへ移動する
cd game-server - Node.jsの初期化をする
npm init -y - 必要なライブラリのインストールをする
npm install express socket.io
サーバー本体の実装をする
- game-server直下に
index.jsを作成する - コードを記載する
indx.js
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const fs = require('fs');
const dbFile = 'db.json';
const initDb = () => {
if (!fs.existsSync(dbFile)) {
fs.writeFileSync(dbFile, JSON.stringify({ users: [] }, null, 2));
}
};
initDb();
const app = express();
const server = http.createServer(app);
const io = new Server(server, { cors: { origin: "*" } });
io.on('connection', (socket) => {
console.log('User connected:', socket.id);
socket.on('login_request', (data) => {
const username = data.username;
const dbData = JSON.parse(fs.readFileSync(dbFile));
let user = dbData.users.find(u => u.username === username);
if (!user) {
user = { username: username, level: 1, lastLogin: new Date() };
dbData.users.push(user);
fs.writeFileSync(dbFile, JSON.stringify(dbData, null, 2));
console.log(`新規ユーザー登録: ${username}`);
} else {
console.log(`既存ユーザーログイン: ${username}`);
}
socket.emit('login_response', {
success: true,
userData: user
});
});
});
server.listen(3000, () => console.log('Server running on port 3000'));
- ターミナルで
node index.jsと入力する -
Server running on port 3000と表示されればOK
また、初回起動時はdb.jsonも生成されます。
db.json
{
"users": []
}
まとめ
これでサーバーの準備まで完了しました。
データを保持する方法として、本格的なDBを準備すると環境構築が大変になるので、今回はNode.js標準のfsモジュールを使って、JSON形式でデータを保持します。