Commit 9638dab2 authored by Vũ Gia Vương's avatar Vũ Gia Vương

add multi core

parent 1370eb19
...@@ -19,8 +19,10 @@ const socket_io_1 = require("socket.io"); ...@@ -19,8 +19,10 @@ const socket_io_1 = require("socket.io");
const socket_1 = require("./socket"); const socket_1 = require("./socket");
const redis_adapter_1 = require("@socket.io/redis-adapter"); const redis_adapter_1 = require("@socket.io/redis-adapter");
const redis_1 = require("redis"); const redis_1 = require("redis");
const PORT = process.env.PORT || 3001; const PORT = process.env.PORT || 6636;
const REDIS_URL = "redis://default:Myreview123@123a@127.0.0.1:6379"; const REDIS_URL = "redis://default:Myreview123@123a@127.0.0.1:6379";
// const REDIS_URL = "redis://127.0.0.1:6379";
const PATH = '/socketws/socket.io';
exports.redis = (0, redis_1.createClient)({ url: REDIS_URL }); exports.redis = (0, redis_1.createClient)({ url: REDIS_URL });
function initRedis() { function initRedis() {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
...@@ -33,15 +35,10 @@ initRedis().catch(err => { ...@@ -33,15 +35,10 @@ initRedis().catch(err => {
}); });
const server = http_1.default.createServer(server_1.default); const server = http_1.default.createServer(server_1.default);
const io = new socket_io_1.Server(server, { const io = new socket_io_1.Server(server, {
path: '/socket', path: PATH,
cors: { cors: {
methods: ["GET", "POST"], methods: ["GET", "POST"],
origin: [ origin: "*"
"https://play.gamee.vn",
"https://dev.gamee.vn",
"http://localhost:7456"
],
credentials: true
} }
}); });
const pubClient = (0, redis_1.createClient)({ url: REDIS_URL }); const pubClient = (0, redis_1.createClient)({ url: REDIS_URL });
......
...@@ -11,7 +11,7 @@ app.use(express_1.default.json()); ...@@ -11,7 +11,7 @@ app.use(express_1.default.json());
app.get('/', (req, res, next) => { app.get('/', (req, res, next) => {
res.send('Hello World'); res.send('Hello World');
}); });
// app.get('/socket', (req: Request, res: Response, next: NextFunction) => { app.get('/socketws/dev', (req, res, next) => {
// res.send('socket') res.send('dev');
// }) });
exports.default = app; exports.default = app;
...@@ -40,26 +40,31 @@ const CONFIG = { ...@@ -40,26 +40,31 @@ const CONFIG = {
const TIME_EX = 24 * 60 * 60; const TIME_EX = 24 * 60 * 60;
function setupSocket(io) { function setupSocket(io) {
return __awaiter(this, void 0, void 0, function* () { return __awaiter(this, void 0, void 0, function* () {
try { io.use((socket, next) => __awaiter(this, void 0, void 0, function* () {
io.use((socket, next) => __awaiter(this, void 0, void 0, function* () { try {
const token = String(socket.handshake.query.token); const token = String(socket.handshake.query.token);
const userId = String(socket.handshake.query.userId); const userId = String(socket.handshake.query.userId);
if (!token || !userId) { if (!token || !userId) {
return; return;
} }
const keys = yield _1.redis.keys("user:*"); // const keys = await redis.keys("user:*");
console.log('keys', keys); // console.log('keys', keys)
const userJson = yield _1.redis.get(`user:${userId}`); const userJson = yield _1.redis.get(`user:${userId}`);
const user = userJson ? JSON.parse(userJson) : null; const user = userJson ? JSON.parse(userJson) : null;
const newUser = new User_1.default(user || { token, id: userId }); const newUser = new User_1.default(user || { token, id: userId });
users.set(userId, newUser); users.set(userId, newUser);
if (!user) { if (!user) {
yield _1.redis.set(`user:${userId}`, JSON.stringify(user)); yield _1.redis.set(`user:${userId}`, JSON.stringify(user));
yield _1.redis.expire(`user:${user.id}`, TIME_EX); yield _1.redis.expire(`user:${userId}`, TIME_EX);
} }
next(); next();
})); }
io.on("connection", (socket) => { catch (error) {
console.log('error', error);
}
}));
io.on("connection", (socket) => {
try {
console.log(`🟢 Client connected: ${socket.id}`); console.log(`🟢 Client connected: ${socket.id}`);
const userId = String(socket.handshake.query.userId); const userId = String(socket.handshake.query.userId);
const user = users.get(userId); const user = users.get(userId);
...@@ -68,11 +73,11 @@ function setupSocket(io) { ...@@ -68,11 +73,11 @@ function setupSocket(io) {
socket.on(CONFIG.EVT.HISTORY, () => __awaiter(this, void 0, void 0, function* () { return yield getHistory(socket, user); })); socket.on(CONFIG.EVT.HISTORY, () => __awaiter(this, void 0, void 0, function* () { return yield getHistory(socket, user); }));
socket.on(CONFIG.EVT.END_GAME, () => endGame(socket, user)); socket.on(CONFIG.EVT.END_GAME, () => endGame(socket, user));
socket.on("disconnect", () => __awaiter(this, void 0, void 0, function* () { return yield onDisconnect(socket, user); })); socket.on("disconnect", () => __awaiter(this, void 0, void 0, function* () { return yield onDisconnect(socket, user); }));
}); }
} catch (error) {
catch (error) { console.log('error', error);
console.log('error', error); }
} });
}); });
} }
function endGame(socket, user) { function endGame(socket, user) {
...@@ -173,7 +178,7 @@ function passTower(socket, data, user) { ...@@ -173,7 +178,7 @@ function passTower(socket, data, user) {
else { else {
user.combo = 0; user.combo = 0;
} }
user.totalScore += score; user.totalScore += Math.max(score, 0);
const dataSocket = { const dataSocket = {
target, target,
score, score,
......
...@@ -5,8 +5,10 @@ import { setupSocket } from "./socket"; ...@@ -5,8 +5,10 @@ import { setupSocket } from "./socket";
import { createAdapter } from "@socket.io/redis-adapter"; import { createAdapter } from "@socket.io/redis-adapter";
import { createClient } from "redis"; import { createClient } from "redis";
const PORT = process.env.PORT || 3001; const PORT = process.env.PORT || 6636;
const REDIS_URL = "redis://default:Myreview123@123a@127.0.0.1:6379"; const REDIS_URL = "redis://default:Myreview123@123a@127.0.0.1:6379";
// const REDIS_URL = "redis://127.0.0.1:6379";
const PATH = '/socketws/socket.io';
export const redis = createClient({ url: REDIS_URL }); export const redis = createClient({ url: REDIS_URL });
...@@ -22,15 +24,10 @@ initRedis().catch(err => { ...@@ -22,15 +24,10 @@ initRedis().catch(err => {
const server = http.createServer(app); const server = http.createServer(app);
const io = new Server(server, { const io = new Server(server, {
path: '/socket', path: PATH,
cors: { cors: {
methods: ["GET", "POST"], methods: ["GET", "POST"],
origin: [ origin: "*"
"https://play.gamee.vn",
"https://dev.gamee.vn",
"http://localhost:7456"
],
credentials: true,
} }
}); });
......
...@@ -9,8 +9,9 @@ app.get('/', (req: Request, res: Response, next: NextFunction) => { ...@@ -9,8 +9,9 @@ app.get('/', (req: Request, res: Response, next: NextFunction) => {
res.send('Hello World') res.send('Hello World')
}) })
// app.get('/socket', (req: Request, res: Response, next: NextFunction) => { app.get('/socketws/dev', (req: Request, res: Response, next: NextFunction) => {
// res.send('socket') res.send('dev')
// }) })
export default app; export default app;
...@@ -30,16 +30,17 @@ const CONFIG = { ...@@ -30,16 +30,17 @@ const CONFIG = {
const TIME_EX = 24 * 60 * 60; const TIME_EX = 24 * 60 * 60;
export async function setupSocket(io: Server) { export async function setupSocket(io: Server) {
try {
io.use(async (socket: Socket, next) => { io.use(async (socket: Socket, next) => {
try {
const token = String(socket.handshake.query.token); const token = String(socket.handshake.query.token);
const userId = String(socket.handshake.query.userId); const userId = String(socket.handshake.query.userId);
if (!token || !userId) { if (!token || !userId) {
return; return;
} }
const keys = await redis.keys("user:*"); // const keys = await redis.keys("user:*");
console.log('keys', keys) // console.log('keys', keys)
const userJson = await redis.get(`user:${userId}`); const userJson = await redis.get(`user:${userId}`);
const user = userJson ? JSON.parse(userJson) : null; const user = userJson ? JSON.parse(userJson) : null;
...@@ -48,12 +49,16 @@ export async function setupSocket(io: Server) { ...@@ -48,12 +49,16 @@ export async function setupSocket(io: Server) {
if (!user) { if (!user) {
await redis.set(`user:${userId}`, JSON.stringify(user)); await redis.set(`user:${userId}`, JSON.stringify(user));
await redis.expire(`user:${user.id}`, TIME_EX); await redis.expire(`user:${userId}`, TIME_EX);
} }
next(); next();
}); } catch (error) {
console.log('error', error)
}
});
io.on("connection", (socket: Socket) => { io.on("connection", (socket: Socket) => {
try {
console.log(`🟢 Client connected: ${socket.id}`); console.log(`🟢 Client connected: ${socket.id}`);
const userId = String(socket.handshake.query.userId); const userId = String(socket.handshake.query.userId);
const user = users.get(userId)!; const user = users.get(userId)!;
...@@ -65,10 +70,11 @@ export async function setupSocket(io: Server) { ...@@ -65,10 +70,11 @@ export async function setupSocket(io: Server) {
socket.on(CONFIG.EVT.END_GAME, () => endGame(socket, user)); socket.on(CONFIG.EVT.END_GAME, () => endGame(socket, user));
socket.on("disconnect", async () => await onDisconnect(socket, user)); socket.on("disconnect", async () => await onDisconnect(socket, user));
}); } catch (error) {
} catch (error) { console.log('error', error)
console.log('error', error) }
} });
} }
async function endGame(socket: Socket, user: User) { async function endGame(socket: Socket, user: User) {
...@@ -171,7 +177,7 @@ async function passTower(socket: Socket, data: IRequestPassTower, user: User) { ...@@ -171,7 +177,7 @@ async function passTower(socket: Socket, data: IRequestPassTower, user: User) {
user.combo = 0; user.combo = 0;
} }
user.totalScore += score; user.totalScore += Math.max(score, 0);
const dataSocket: IDataPassTower = { const dataSocket: IDataPassTower = {
target, target,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment