アプリケーション構造
イベントハンドラを登録する
イベントハンドラを登録する方法については、次の 2 つを提案しています。
これらは単なる提案であり、厳密に従わなければならないガイドラインではないことに注意してください。自由にカスタマイズしてください!
各ファイルに独自のイベントハンドラが登録される
ここで、エントリポイントは整理されますが、イベントリスナーはあまり見つけにくくなります (ただし、厳密な命名規則や ctrl + f が役に立ちます)。
index.js
const httpServer = require("http").createServer();
const io = require("socket.io")(httpServer);
const registerOrderHandlers = require("./orderHandler");
const registerUserHandlers = require("./userHandler");
const onConnection = (socket) => {
registerOrderHandlers(io, socket);
registerUserHandlers(io, socket);
}
io.on("connection", onConnection);
orderHandler.js
module.exports = (io, socket) => {
const createOrder = (payload) => {
// ...
}
const readOrder = (orderId, callback) => {
// ...
}
socket.on("order:create", createOrder);
socket.on("order:read", readOrder);
}
すべてのイベントハンドラが index.js
ファイルに登録される
ここで、各イベント名は同じ場所にあり、見つけやすいですが、中規模から大規模のアプリケーションでは手作業が必要になる可能性があります。
index.js
const httpServer = require("http").createServer();
const io = require("socket.io")(httpServer);
const { createOrder, readOrder } = require("./orderHandler")(io);
const { updatePassword } = require("./userHandler")(io);
const onConnection = (socket) => {
socket.on("order:create", createOrder);
socket.on("order:read", readOrder);
socket.on("user:update-password", updatePassword);
}
io.on("connection", onConnection);
orderHandler.js
module.exports = (io) => {
const createOrder = function (payload) {
const socket = this; // hence the 'function' above, as an arrow function will not work
// ...
};
const readOrder = function (orderId, callback) {
// ...
};
return {
createOrder,
readOrder
}
}