Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
game-server-flip-jump
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Vũ Gia Vương
game-server-flip-jump
Commits
9638dab2
Commit
9638dab2
authored
Aug 22, 2025
by
Vũ Gia Vương
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add multi core
parent
1370eb19
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
54 additions
and
48 deletions
+54
-48
index.js
dist/index.js
+5
-8
server.js
dist/server.js
+3
-3
socket.js
dist/socket.js
+18
-13
index.ts
src/index.ts
+5
-8
server.ts
src/server.ts
+4
-3
socket.ts
src/socket.ts
+19
-13
No files found.
dist/index.js
View file @
9638dab2
...
@@ -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
});
...
...
dist/server.js
View file @
9638dab2
...
@@ -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
;
dist/socket.js
View file @
9638dab2
...
@@ -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
.
i
d
}
`
,
TIME_EX
);
yield
_1
.
redis
.
expire
(
`user:
${
user
I
d
}
`
,
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
,
...
...
src/index.ts
View file @
9638dab2
...
@@ -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
,
}
}
});
});
...
...
src/server.ts
View file @
9638dab2
...
@@ -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
;
src/socket.ts
View file @
9638dab2
...
@@ -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
.
i
d
}
`
,
TIME_EX
);
await
redis
.
expire
(
`user:
${
user
I
d
}
`
,
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
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment