Sau khi khởi tạo thành công dự án ReactJS và tạo ra màn hình login thành công, giờ là lúc chúng ta sẽ cần phải khởi tạo dự án server để có thể bô sung các mã nguồn cho phép client kết nối đến. Trong bài này Dũng sẽ cùng các bạn khởi tạo dự án socket server cho freechat với EzyFox Server nhé.
Khởi tạo dự án server
Để khởi tạo dự án server bạn có thể tham khảo hướng dẫn này.
Hãy đảm bảo rằng bạn đã cài java 8 và maven sau đó bạn có thể mở terminal hoặc cmd, cd vào thư mục freechat và gõ lệnh:
mvn archetype:generate \
-DgroupId="com.tvd12" \
-DartifactId="freechat" \
-Dpackage="com.tvd12.freechat" \
-DarchetypeGroupId="com.tvd12" \
-DarchetypeArtifactId="ezyfox-server-archetype" \
-DarchetypeVersion="1.3.3" \
-DinteractiveMode=false
Một thư mục freechat dự án server có tên freechat sẽ được tạo ra, bạn hãy đổi tên thư mục freechat này thành server để phân biệt với các dự án client khác. Lúc này chúng ta sẽ có cấu trúc thư mục như sau:
Import dự án vào IntelliJ
Tiếp theo bạn sẽ cần import dự án freechat server vào intelliJ. Bạn hãy mở intelliJ, File -> Open tìm đến thư mục freechat/server sau đó nhấn Open (mở) để import dự án. Lúc này InteillJ sẽ tự đồng tải các thư viện phụ thuộc. Sau khi mọi thứ xong xuôi chúng ta sẽ có cấu trúc thư mục dự án trên intelliJ như sau:
Bạn cần chọn java 8 hoặc java 11 cho dự án bằng cách chọn File -> Project structure sau đó chọn SDK là 1.8 hoặc 11, ví dụ của mình là:
Khởi chạy dự án
Sau khi đã import dự án thành công, chúng ta có thể khởi chạy dự án bằng cách tìm đến tập tin ApplicationStartup trong module freechat-startup và chạy nó ở chế độ thông thường hay debug đều được, như mình thì quen dùng chế độ chạy debug:
Sau khi chương trình khởi chạy thành công, chúng ta sẽ thấy log như sau:
{
"settings": {
"nodeName": "ezyfox",
"udp": {
"channelPoolSize": 16,
"address": "0.0.0.0",
"maxRequestSize": 1024,
"port": 2611,
"active": false,
"handlerThreadPoolSize": 5
},
"debug": false,
"maxSessions": 999999,
"sessionManagement": {
"sessionMaxRequestPerSecond": {
"action": "DROP_REQUEST",
"value": 15
},
"sessionMaxIdleTime": 30000,
"sessionMaxWaitingTimeInSecond": 30,
"sessionMaxIdleTimeInSecond": 30,
"sessionMaxWaitingTime": 30000
},
"logger": {
"ignoredCommands": "[PONG, PING]"
},
"zones": {
"size": 1,
"zones": [{
"maxUsers": 999999,
"userManagement": {
"allowGuestLogin": false,
"userMaxIdleTime": 0,
"allowChangeSession": true,
"guestNamePrefix": "Guest#",
"maxSessionPerUser": 5,
"userMaxIdleTimeInSecond": 0,
"userNamePattern": "^[a-zA-Z0-9_.#]{3,64}$"
},
"streaming": {
"enable": false
},
"plugins": {
"size": 1,
"plugins": [{
"listenEvents": "[USER_LOGIN]",
"folder": "freechat",
"threadPoolSize": 0,
"configFile": "",
"name": "freechat",
"activeProfiles": null,
"entryLoader": "com.tvd12.freechat.ApplicationStartup$DecoratedPluginEntryLoader",
"id": 1,
"packageName": null,
"priority": 0
}]
},
"configFile": "",
"name": "freechat",
"id": 1,
"eventControllers": {
"eventControllers": []
},
"applications": {
"size": 1,
"apps": [{
"maxUsers": 999999,
"folder": "freechat",
"threadPoolSize": 0,
"configFile": "",
"name": "freechat",
"activeProfiles": null,
"entryLoader": "com.tvd12.freechat.ApplicationStartup$DecoratedAppEntryLoader",
"id": 1,
"packageName": null
}]
}
}]
},
"eventControllers": {
"eventControllers": []
},
"streaming": {
"enable": false
},
"threadPoolSize": {
"extensionRequestHandler": 8,
"socketUserRemovalHandler": 3,
"streamHandler": 8,
"socketDisconnectionHandler": 2,
"socketDataReceiver": 8,
"statistics": 1,
"systemRequestHandler": 8
},
"websocket": {
"codecCreator": "com.tvd12.ezyfox.codec.JacksonCodecCreator",
"address": "0.0.0.0",
"sslConfig": {
"file": "ssl-config.properties",
"loader": "com.tvd12.ezyfoxserver.ssl.EzySimpleSslConfigLoader",
"contextFactoryBuilder": "com.tvd12.ezyfoxserver.ssl.EzySimpleSslContextFactoryBuilder"
},
"port": 2208,
"sslActive": false,
"active": true,
"sslPort": 2812,
"maxFrameSize": 2048,
"managementEnable": false,
"writerThreadPoolSize": 8
},
"socket": {
"codecCreator": "com.tvd12.ezyfox.codec.MsgPackCodecCreator",
"address": "0.0.0.0",
"maxRequestSize": 4096,
"port": 3005,
"sslType": "CUSTOMIZATION",
"sslHandshakeTimeout": 350,
"sslActive": false,
"active": true,
"tcpNoDelay": false,
"writerThreadPoolSize": 8
},
"admins": {
"count": 0,
"admins": []
}
},
"version": "1.0.0",
"config": {
"loggerConfigFile": "default",
"enableAppClassLoader": false,
"ezyfoxHome": ""
}
}
2024-07-15 16:06:53.266 [main] INFO c.tvd12.ezyfoxserver.EzyZonesStarter start zones: [freechat]
2024-07-15 16:06:53.266 [main] INFO c.tvd12.ezyfoxserver.EzyZonesStarter start all plugins ...
2024-07-15 16:06:53.269 [main] INFO c.t.ezyfoxserver.EzyPluginsStarter start plugins: [freechat]
2024-07-15 16:06:53.275 [main] INFO c.t.f.ApplicationStartup$DecoratedPluginEntryLoader$1
=================== freechat PLUGIN START CONFIG ================
2024-07-15 16:06:53.460 [main] INFO c.t.e.b.i.EzySimpleBeanContext$Builder active profiles: null
2024-07-15 16:06:53.619 [main] INFO c.t.f.ApplicationStartup$DecoratedPluginEntryLoader$1 add event SERVER_READY controller com.tvd12.freechat.plugin.controller.ServerReadyController@19b843ba
2024-07-15 16:06:53.619 [main] INFO c.t.f.ApplicationStartup$DecoratedPluginEntryLoader$1 add event USER_LOGIN controller com.tvd12.freechat.plugin.controller.UserLoginController@7905a0b8
2024-07-15 16:06:53.632 [main] INFO c.t.f.ApplicationStartup$DecoratedPluginEntryLoader$1
=================== freechat PLUGIN END CONFIG ================
2024-07-15 16:06:53.632 [main] INFO c.tvd12.ezyfoxserver.EzyZonesStarter start all apps ...
2024-07-15 16:06:53.633 [main] INFO c.tvd12.ezyfoxserver.EzyAppsStarter start apps: [freechat]
2024-07-15 16:06:53.638 [main] INFO c.t.f.ApplicationStartup$DecoratedAppEntryLoader$1
=================== freechat APP START CONFIG ================
2024-07-15 16:06:53.815 [main] INFO c.t.e.b.i.EzySimpleBeanContext$Builder active profiles: null
2024-07-15 16:06:53.847 [main] INFO c.t.f.ApplicationStartup$DecoratedAppEntryLoader$1 add event SERVER_READY controller com.tvd12.freechat.app.controller.ServerReadyController@7a362b6b
2024-07-15 16:06:53.875 [main] INFO c.t.f.ApplicationStartup$DecoratedAppEntryLoader$1
=================== freechat APP END CONFIG ================
2024-07-15 16:06:53.979 [main] INFO org.eclipse.jetty.util.log Logging initialized @1942ms to org.eclipse.jetty.util.log.Slf4jLog
2024-07-15 16:06:54.121 [main] INFO org.eclipse.jetty.server.Server jetty-9.4.50.v20221201; built: 2022-12-01T22:07:03.915Z; git: da9a0b30691a45daf90a9f17b5defa2f1434f882; jvm 1.8.0_281-b09
2024-07-15 16:06:54.183 [main] INFO o.e.j.server.handler.ContextHandler Started o.e.j.s.h.ContextHandler@75f95314{/ws,null,AVAILABLE}
2024-07-15 16:06:54.192 [main] INFO o.e.jetty.server.AbstractConnector Started ServerConnector@4b41e4dd{HTTP/1.1, (http/1.1)}{0.0.0.0:2208}
2024-07-15 16:06:54.193 [main] INFO org.eclipse.jetty.server.Server Started @2156ms
2024-07-15 16:06:54.223 [main] INFO c.t.e.nio.EzyNioServerBootstrap
______ ________ ________ ______ __ _____ ______ _______ __
| ____|___ /\ \ / / ____/ __ \ \ / / | __ \| ____| /\ | __ \ \ / /
| |__ / / \ \_/ /| |__ | | | \ V / ______ | |__) | |__ / \ | | | \ \_/ /
| __| / / \ / | __|| | | |> < |______| | _ /| __| / /\ \ | | | |\ /
| |____ / /__ | | | | | |__| / . \ | | \ \| |____ / ____ \| |__| | | |
|______/_____| |_| |_| \____/_/ \_\ |_| \_\______/_/ \_\_____/ |_|
2024-07-15 16:06:54.223 [main] INFO c.t.f.p.c.ServerReadyController freechat plugin: fire custom app ready
2024-07-15 16:06:54.224 [main] INFO c.t.f.a.c.ServerReadyController freechat app: fire custom app ready
Tổng kết
Chúc mừng bạn đã khởi tạo thành công dự án server cho ứng dụng freechat realtime. Chúng ta sẽ cùng tìm hiểu về cấu trúc thư mục trong bài tiếp theo nhé.
Cám ơn bạn đã quan tâm đến bài viết này. Để nhận được thêm các kiến thức bổ ích bạn có thể:
- Đọc các bài viết của TechMaster trên facebook: https://www.facebook.com/techmastervn
- Xem các video của TechMaster qua Youtube: https://www.youtube.com/@TechMasterVietnam nếu bạn thấy video/bài viết hay bạn có thể theo dõi kênh của TechMaster để nhận được thông báo về các video mới nhất nhé.
Bình luận