การสร้างและรันโปรเจกต์ Socket.io ด้วย ServBay
Socket.io เป็นไลบรารี JavaScript ยอดนิยมที่ถูกออกแบบมาเพื่อการสร้างแอปพลิเคชันเว็บแบบเรียลไทม์, สองทาง, และขับเคลื่อนด้วยเหตุการณ์ (event-driven) โดยเฉพาะ โดย Socket.io สร้างอยู่บนโปรโตคอล WebSocket และมีระบบสำรอง (fallback) เช่น long polling เพื่อให้มั่นใจว่า สามารถสื่อสารแบบเรียลไทม์ได้อย่างเสถียรไม่ว่าผู้ใช้และเครือข่ายจะเป็นแบบใด
คู่มือนี้จะแนะนำทีละขั้นตอนสำหรับการใช้ประโยชน์จากสภาพแวดล้อมการพัฒนาอันทรงพลังของ ServBay ในการติดตั้ง รัน และจัดการโปรเจกต์ Socket.io ServBay มาพร้อม Node.js ที่คอนฟิกไว้ล่วงหน้า และเครื่องมือจัดการเว็บไซต์ (หรือ โฮสต์) ที่ใช้งานง่าย เพื่อให้การพัฒนา Socket.io มีประสิทธิภาพและสะดวกรวดเร็วยิ่งขึ้น
Socket.io คืออะไร?
Socket.io คือไลบรารีที่รองรับการสื่อสารแบบเรียลไทม์, สองทาง และขับเคลื่อนด้วยอีเวนต์ ประกอบด้วยสองส่วนหลัก:
- ไลบรารีฝั่งเซิร์ฟเวอร์ที่ทำงานบน Node.js
- ไลบรารี JavaScript ฝั่งไคลเอนต์ที่ทำงานในเบราว์เซอร์
แม้ Socket.io จะถูกออกแบบมาให้ใช้ WebSocket เป็นหลัก แต่ก็ยังรองรับวิธีการอื่นอย่าง Adobe Flash Socket, Ajax Long Polling, Ajax Multipart Streaming, Forever IFrame, JSONP Polling เป็นต้น เพื่อรับมือกับเบราว์เซอร์รุ่นเก่าหรือสภาพเครือข่ายที่ไม่สนับสนุน WebSocket ได้อย่างมีประสิทธิภาพ
จุดเด่นและข้อดีหลักของ Socket.io
- การสื่อสารแบบเรียลไทม์: ส่งข้อมูลระหว่างเซิร์ฟเวอร์และไคลเอนต์ได้ทันที เหมาะอย่างยิ่งสำหรับแอปแชท, เครื่องมือร่วมมือ (collaboration), dashboard เรียลไทม์, เกมออนไลน์ ฯลฯ
- รองรับข้ามแพลตฟอร์ม: ใช้งานได้ทั้งบนเว็บเบราว์เซอร์, แอปมือถือ และเซิร์ฟเวอร์ Node.js
- ต่ออัตโนมัติ: หากเครือข่ายขาดการเชื่อมต่อ ไคลเอนต์จะพยายามเชื่อมต่อใหม่อัตโนมัติ เพิ่มเสถียรของแอป
- ขับเคลื่อนด้วยเหตุการณ์: โครงสร้าง event-driven ช่วยให้จัดการการสื่อสารแบบ asynchronous ได้ง่ายและตรงไปตรงมา
- Room และ Namespace: แบ่งกลุ่มไคลเอนต์เป็น “ห้อง” เพื่อบรอดแคสต์เฉพาะกลุ่ม หรือใช้งาน “namespace” แยกการเชื่อมต่อหลายรายการบน connection เดียว
- รองรับข้อมูลไบนารี: ส่งและรับข้อมูลแบบไบนารีได้อย่างง่ายดาย
- ความเข้ากันได้สูง: มี fallback รองรับการเชื่อมต่อในทุกสภาพแวดล้อมเครือข่ายและเบราว์เซอร์
ด้วย Socket.io นักพัฒนาจึงสามารถโฟกัสที่ business logic ได้เต็มที่โดยไม่ต้องกังวลเรื่องเงื่อนไขรายละเอียดของระบบสื่อสารแบบเรียลไทม์เบื้องหลัง
การสร้างและรันโปรเจกต์ Socket.io ด้วย ServBay
ServBay มอบสภาพแวดล้อม Node.js ที่พร้อมใช้งาน — ทั้ง runtime, npm package manager และเครื่องมือจัดการเว็บไซต์ที่สะดวก ในคู่มือนี้เราจะสร้างและรันโปรเจกต์ตัวอย่าง Socket.io อย่างง่าย
ข้อกำหนดเบื้องต้น
ก่อนเริ่ม โปรดตรวจสอบว่าคุณได้ดำเนินการสิ่งเหล่านี้
- ติดตั้ง ServBay: ดาวน์โหลดและติดตั้งเวอร์ชันล่าสุดจาก เว็บไซต์ ServBay อย่างเป็นทางการ
- ติดตั้ง Node.js ผ่าน ServBay: ตรวจสอบว่าคุณได้ติดตั้ง Node.js package ใน ServBay แล้ว สามารถติดตั้งและบริหารจากส่วน “แพ็คเกจ” (“Services” เดิม) ในแผงควบคุมของ ServBay ดู การใช้ Node.js ใน ServBay สำหรับรายละเอียดเพิ่มเติม
สร้างโปรเจกต์ Socket.io Chat ตัวอย่าง
เราจะสร้างตัวอย่างโปรเจกต์แอปแชทแบบเรียลไทม์อย่างง่าย
เตรียมโฟลเดอร์โปรเจกต์:
เปิด terminal โดยทั่วไป, ServBay แนะนำให้นำเว็บไซต์ไปเก็บไว้ใน
/Applications/ServBay/www
เข้าไปที่โฟลเดอร์นี้, สร้างโฟลเดอร์ใหม่สำหรับโปรเจกต์, แล้วสั่ง initialize พร้อมติดตั้ง dependencies:bashcd /Applications/ServBay/www mkdir servbay-socketio-chat cd servbay-socketio-chat npm init -y npm install express socket.io
1
2
3
4
5หลังจากนี้จะได้ไฟล์
package.json
ในโฟลเดอร์servbay-socketio-chat
และติดตั้งexpress
(สำหรับ static file และ HTTP requests) กับsocket.io
ซึ่งเป็น dependency หลักสร้างไฟล์เซิร์ฟเวอร์ (
server.js
):ใน root ของโปรเจกต์
servbay-socketio-chat
สร้างไฟล์ชื่อserver.js
แล้วคัดลอกโค้ดข้างล่างนี้ไปวาง ไฟล์นี้จะใช้สำหรับรัน HTTP server, ติดตั้ง Socket.io และจัดการเชื่อมต่อ/บรอดแคสต์ข้อความjavascriptconst express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const path = require('path'); // นำเข้าโมดูล path const app = express(); // สร้าง HTTP server จาก express app const server = http.createServer(app); // แนบ Socket.io เข้ากับ HTTP server const io = socketIo(server); // กำหนดโฟลเดอร์ static ให้ชี้ไปยังโฟลเดอร์ปัจจุบัน app.use(express.static(__dirname)); // รับ GET กับ path หลัก แล้วส่งไฟล์ index.html app.get('/', (req, res) => { // ใช้ path.join เพื่อรองรับหลายระบบปฏิบัติการ res.sendFile(path.join(__dirname, 'index.html')); }); // ฟัง event การเชื่อมต่อ Socket.io io.on('connection', (socket) => { console.log('a user connected'); // แจ้งเมื่อมีผู้ใช้ใหม่เชื่อมต่อ // ฟัง event การตัดการเชื่อมต่อ socket.on('disconnect', () => { console.log('user disconnected'); // แจ้งเมื่อมีผู้ใช้ตัดการเชื่อมต่อ }); // ฟัง event 'chat message' socket.on('chat message', (msg) => { console.log('message: ' + msg); // พิมพ์ข้อความที่ได้รับ // บรอดแคสต์ข้อความที่ได้รับไปหาไคลเอนต์ทั้งหมด io.emit('chat message', msg); }); }); // รับค่า port จาก environment variable หรือกำหนด 3000 เป็นค่าเริ่มต้น const port = process.env.PORT || 3000; server.listen(port, () => { console.log(`Server running on port ${port}`); console.log(`Access it via http://localhost:${port} (direct) or via ServBay reverse proxy`); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43คำอธิบายโค้ด:
- ใช้
express
ทำ web server เพื่อให้บริการไฟล์index.html
http.createServer(app)
สร้าง HTTP server มาตรฐานให้ Socket.io แนบกับsocketIo(server)
เริ่ม Socket.io และ bind กับ HTTP serverio.on('connection', ...)
ฟัง event เชื่อมต่อ client ใหม่socket.on('disconnect', ...)
ฟัง event client ตัดการเชื่อมต่อsocket.on('chat message', ...)
ฟัง event รับข้อความ “chat message” จาก clientio.emit('chat message', msg)
บรอดแคสต์ข้อความไปยัง ทุก client ที่เชื่อมต่อ
- ใช้
สร้างไฟล์ฝั่งไคลเอนต์ (
index.html
):ที่ root ของโปรเจกต์
servbay-socketio-chat
สร้างไฟล์index.html
แล้วคัดลอกโค้ดต่อไปนี้ไปวาง ซึ่งมีโครงสร้าง HTML, CSS และ JavaScript สำหรับเชื่อมต่อ, ส่ง, รับ และแสดงข้อความhtml<!DOCTYPE html> <html> <head> <title>ServBay Socket.io Chat</title> <style> body { margin: 0; padding-bottom: 3rem; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } #form { background: rgba(0, 0, 0, 0.15); padding: 0.25rem; position: fixed; bottom: 0; left: 0; right: 0; display: flex; height: 3rem; box-sizing: border-box; backdrop-filter: blur(10px); } #input { border: none; padding: 0 1rem; flex-grow: 1; border-radius: 2rem; margin: 0.25rem; } #input:focus { outline: none; } #form > button { background: #333; border: none; padding: 0 1rem; margin: 0.25rem; border-radius: 3px; outline: none; color: #fff; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages > li { padding: 0.5rem 1rem; } #messages > li:nth-child(odd) { background: #efefef; } .servbay-banner { background-color: #007bff; /* สีประจำของ ServBay */ color: white; text-align: center; padding: 15px 0; font-size: 22px; margin-bottom: 20px; font-weight: bold; } </style> </head> <body> <div class="servbay-banner">ยินดีต้อนรับสู่เดโมแชท ServBay Socket.io!</div> <ul id="messages"></ul> <form id="form" action=""> <input id="input" autocomplete="off" /><button type="submit">ส่ง</button> </form> <!-- โหลดไลบรารี Socket.io ฝั่งไคลเอนต์ --> <!-- ไฟล์นี้ถูกเจนโดยฝั่งเซิร์ฟเวอร์ Socket.io ขณะรัน --> <script src="/socket.io/socket.io.js"></script> <script> // เชื่อมต่อกับเซิร์ฟเวอร์ Socket.io // ถ้าไคลเอนต์และเซิร์ฟเวอร์รันบนโดเมนและพอร์ตเดียวกัน io() จะเชื่อมต่ออัตโนมัติ var socket = io(); var form = document.getElementById('form'); var input = document.getElementById('input'); var messages = document.getElementById('messages'); // ดึง element messages form.addEventListener('submit', function(e) { e.preventDefault(); // ยกเลิกพฤติกรรม submit ปกติของฟอร์ม if (input.value) { // ส่งอีเวนต์ 'chat message' และเนื้อหาข้อความไปยังเซิร์ฟเวอร์ socket.emit('chat message', input.value); input.value = ''; // ล้างอินพุต } }); // ฟังอีเวนต์ 'chat message' ที่ส่งมาจากเซิร์ฟเวอร์ socket.on('chat message', function(msg) { // สร้าง list item สำหรับแสดงข้อความ var item = document.createElement('li'); item.textContent = msg; // ใส่ข้อความด้วย textContent เพื่อป้องกัน XSS messages.appendChild(item); // เพิ่มลงในรายการ // เลื่อน scroll ไปยังข้อความล่าสุด window.scrollTo(0, document.body.scrollHeight); }); </script> </body> </html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64คำอธิบายโค้ด:
- HTML อย่างง่ายพร้อม CSS (เช่นแบนเนอร์สี ServBay), รายการข้อความ (
ul#messages
) และฟอร์มส่งข้อความ (form#form
) <script src="/socket.io/socket.io.js"></script>
โหลดไฟล์ไลบรารีไคลเอนต์ของ Socket.io (เซิร์ฟเวอร์จะ expose ให้ขณะรัน)io()
เชื่อมต่อไปหาเซิร์ฟเวอร์ Socket.io- ฝั่งไคลเอนต์จะฟังฟอร์ม submit ส่งข้อความด้วย
socket.emit('chat message', input.value)
- เมื่อได้รับ
'chat message'
จากเซิร์ฟเวอร์จะ append ลงในรายชื่อข้อความ
- HTML อย่างง่ายพร้อม CSS (เช่นแบนเนอร์สี ServBay), รายการข้อความ (
ถึงตรงนี้ คุณได้พัฒนาโค้ดโปรเจกต์ตัวอย่าง Socket.io ครบแล้ว ต่อไปจะนำไปรันและเข้าถึงผ่าน ServBay
การรันโปรเจกต์ผ่าน ServBay (Dev Mode)
ในโหมดพัฒนา โดยทั่วไปเราจะรันเซิร์ฟเวอร์ Node.js แล้วตั้งค่า reverse proxy website ใน ServBay เพื่อชี้ไปยังพอร์ตที่ Node.js ใช้งาน
สตาร์ท Node.js Development Server:
เปิด terminal, cd ไปที่
/Applications/ServBay/www/servbay-socketio-chat
แล้วรันเซิร์ฟเวอร์ (เช่น บนพอร์ต 8585):bashcd /Applications/ServBay/www/servbay-socketio-chat PORT=8585 node server.js
1
2เมื่อสตาร์ทสำเร็จ terminal จะขึ้นว่า
Server running on port 8585
หมายถึงเซิร์ฟเวอร์รอรับ request ที่ port 8585ตั้งค่าเว็บไซต์ (Reverse Proxy) บน ServBay:
เพื่อสะดวกในการเข้าถึงเว็บผ่านโดเมนโลคัลและเปิดใช้ SSL, สร้างเว็บไซต์แบบ reverse proxy ใน ServBay
- เปิดแผงควบคุม ServBay
- ไปที่เมนู “เว็บไซต์” (“โฮสต์” เดิม)
- กดปุ่มเพิ่มเว็บไซต์
- กรอก:
- ชื่ิอ:
ServBay Socket.io Dev
(หรือชื่ออื่นที่เข้าใจง่าย) - โดเมน:
servbay-socketio-dev.servbay.demo
(หรือ.servbay.demo
อื่น) - ประเภท: เลือก
Reverse Proxy
- Proxy Destination: ใส่
http://127.0.0.1:8585
(ชี้ไป port Node.js ที่รันไว้)
- ชื่ิอ:
- กดบันทึก ServBay จะปรับ config และอาจต้องรีสตาร์ท web server (เช่น Caddy หรือ Nginx แล้วแต่ config)
หมายเหตุ: Reverse proxy สำคัญกับ Socket.io มาก เพราะต้องรับ HTTP ปกติและ WebSocket handshake ด้วย โดย ServBay config ของ Caddy หรือ Nginx รองรับ proxy แบบ WebSocket ในตัวแล้ว
ดูรายละเอียดการเพิ่มเว็บไซต์ใน ServBay ได้ที่ เพิ่มเว็บไซต์ Node.js Development และการตั้งค่า SSL ได้ที่ การใช้ SSL/TLS กับเว็บไซต์ — ServBay User CA และ ServBay Public CA รองรับการสร้าง/รับรอง SSL certificate แบบ local
เปิดเว็บไซต์ Dev ในเบราว์เซอร์:
เข้า browser และเปิด
https://servbay-socketio-dev.servbay.demo
ซึ่งควรได้หน้าแชทพร้อมใช้งาน และสามารถทดสอบคุยแบบเรียลไทม์ระหว่างแท็บ/อุปกรณ์ได้เลย
ดีพลอยโปรเจกต์ด้วย ServBay (Production Mode)
สำหรับ production มักจะสั่งรัน Node.js ด้วย process manager เช่น PM2 หรือ forever แล้วจึง reverse proxy ผ่าน ServBay (ตรงนี้ขอยกตัวอย่างแค่การ config reverse proxy บน ServBay โดยสมมติ Node.js รัน background ที่ port ใด port หนึ่งไว้อยู่แล้ว)
รัน Node.js Production Server:
ปกติ production ควรรันผ่าน process manager เช่น PM2:
bash# ถ้ายังไม่ได้ติดตั้ง PM2 # npm install pm2 -g cd /Applications/ServBay/www/servbay-socketio-chat PORT=8586 NODE_ENV=production pm2 start server.js --name servbay-socketio-prod
1
2
3
4
5ตัวอย่างนี้ PM2 จะรัน
server.js
ที่ port 8586 และตั้ง environment เป็น production โดย process manager จะดูแลให้แอปรัน background และ auto-restartตั้งค่าเว็บไซต์ Production (Reverse Proxy) บน ServBay:
เหมือนตอน dev, สร้างเว็บไซต์ reverse proxy ใหม่เพื่อชี้ไปยัง Node.js app โหมด production
- เปิดแผงควบคุม ServBay
- ไปที่ “เว็บไซต์”
- กดเพิ่มเว็บไซต์
- ใส่ค่า:
- ชื่อ:
ServBay Socket.io Prod
(หรือชื่อที่ต้องการ) - โดเมน:
servbay-socketio-prod.servbay.demo
(หรือ.servbay.demo
อื่น) - ประเภท: เลือก
Reverse Proxy
- Proxy Destination:
http://127.0.0.1:8586
- ชื่อ:
- กดบันทึก
เปิดเว็บไซต์โปรดักชั่นด้วยเบราว์เซอร์:
ไปที่
https://servbay-socketio-prod.servbay.demo
ด้วยเบราว์เซอร์
ด้วยฟีเจอร์ reverse proxy ใน ServBay คุณสามารถบริหาร Node.js apps ทั้ง dev/prod ได้อย่างง่ายดาย กำหนดโดเมนและ SSL certificate ได้ ไม่ต้องแก้ไฟล์ hosts หรือจัดการ web server conf เองให้ยุ่งยาก
ตัวอย่างการเชื่อมต่อฐานข้อมูลใน ServBay
ServBay รองรับฐานข้อมูลหลากหลาย เช่น MySQL, MariaDB, PostgreSQL, MongoDB, และ Redis — Socket.io app คุณอาจต้องเชื่อมกับฐานข้อมูลเพื่อเก็บข้อมูลผู้ใช้/ข้อความ historical ด้านล่างคือตัวอย่างโค้ดเชื่อมฐานข้อมูลด้วย Node.js
สำคัญ: ก่อนรันโค้ดตัวอย่าง ต้องติดตั้งและสตาร์ทฐานข้อมูลที่ต้องการผ่านแผงควบคุม ServBay ให้เรียบร้อย ตรวจสอบพอร์ต/ยูสเซอร์/รหัสผ่าน ได้จากหน้าจัดการ database ของ ServBay หรือเอกสารประกอบ เช่น root password ของ MySQL/MariaDB คุณต้องตั้งเองระหว่าง install ใน ServBay หรือรีเซ็ตรหัสผ่านจากฟีเจอร์ ServBay
เชื่อม MongoDB:
ติดตั้ง ODM Mongoose (หรือใช้ไดรเวอร์ mongodb ตรงๆ ก็ได้)
bashnpm install mongoose
1ใส่โค้ดเชื่อมต่อใน Node.js (เช่น
server.js
หรือโมดูลแยก)javascriptconst mongoose = require('mongoose'); // เชื่อมกับ MongoDB ที่รัน local (default port 27017) // ตัวอย่าง: ใช้ฐานข้อมูลชื่อ servbay_socketio_app mongoose.connect('mongodb://localhost:27017/servbay_socketio_app', { useNewUrlParser: true, useUnifiedTopology: true, // หากต้องการระบุ user/pass ใส่ตรงนี้ // user: 'your_mongo_user', // pass: 'your_mongo_password' }) .then(() => console.log('MongoDB connected successfully via Mongoose')) .catch(err => console.error('MongoDB connection error:', err)); // จากนี้สามารถกำหนด Schema และ Model ได้เลย // ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16เชื่อม Redis:
ติดตั้งไลบรารี
redis
:bashnpm install redis
1ใส่โค้ดเชื่อมต่อใน Node.js:
javascriptconst redis = require('redis'); // สร้าง Redis client (เชื่อม localhost:6379 เป็นค่ามาตรฐาน) const client = redis.createClient({ // ถ้า Redis มีรหัสผ่าน ให้กำหนดตรงนี้ // password: 'your_redis_password', // url: 'redis://localhost:6379' // ใช้แบบ URL ก็ได้ }); client.on('error', (err) => { console.error('Redis connection error:', err); }); client.on('connect', () => { console.log('Redis client connected successfully'); }); // เชื่อมต่อ Redis server (v4+ ควรเรียก connect()) client.connect(); // สามารถใช้ client สั่ง Redis commands ต่อได้ // เช่น: await client.set('mykey', 'myvalue'); // ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23เชื่อม MariaDB / MySQL:
ServBay รองรับทั้ง MariaDB/MySQL ตัวอย่างนี้ใช้ไลบรารี
mariadb
(ใช้กับ MySQL ได้)bashnpm install mariadb
1ใส่โค้ดเชื่อมต่อใน Node.js:
javascriptconst mariadb = require('mariadb'); // สร้าง connection pool const pool = mariadb.createPool({ host: 'localhost', port: 3306, // MariaDB/MySQL default user: 'root', // ServBay ตั้งไว้เป็น root password: 'password', // แทนที่ด้วย root password ใน ServBay ของคุณ database: 'servbay_socketio_app', // ชื่อฐานตัวอย่าง connectionLimit: 5 }); // ทดสอบต่อฐานข้อมูล pool.getConnection() .then(conn => { console.log("Connected to MariaDB/MySQL successfully"); conn.release(); // คืน connection กลับ pool // จากนี้ใช้ pool.query() สั่ง SQL ได้ // เช่น: await pool.query("SELECT 1"); // ... }) .catch(err => { console.error("MariaDB/MySQL connection error:", err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24หมายเหตุ: อย่าลืมแทนที่
password
เป็น root password ที่ตั้งไว้ตอน install หรือใน ServBay! เพื่อความปลอดภัย, แนะนำให้สร้าง user ใหม่สำหรับแอป ต่างหากจาก rootเชื่อม PostgreSQL:
ติดตั้ง
pg
client:bashnpm install pg
1ใส่โค้ดใน Node.js:
javascriptconst { Pool } = require('pg'); // สร้าง connection pool const pool = new Pool({ user: 'user', // ตั้งค่าตาม user/postgres ที่ตั้งใน ServBay host: 'localhost', database: 'servbay_socketio_app', // ตัวอย่างชื่อฐาน password: 'password', // กำหนด password ของ user/postgres port: 5432, // PostgreSQL default port }); // ทดสอบเชื่อมต่อ pool.connect((err, client, done) => { if (err) { console.error('PostgreSQL connection error:', err); return; } console.log('Connected to PostgreSQL successfully'); client.release(); // คืน connection กลับ pool // สามารถใช้ pool.query สั่ง PostgreSQL ได้เลย // ex: pool.query('SELECT NOW()', (err, res) => { ... }); // ... });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23หมายเหตุ: ต้องแทนที่
user
และpassword
ตามค่าที่ตั้งไว้ใน ServBay
เมื่อต่อ database เหล่านี้ คุณสามารถเก็บข้อมูลถาวรในแอปร่วมกับ Socket.io ได้ตามต้องการ ServBay ช่วยให้ติดตั้ง/เชื่อม Node.js+database ได้รวดเร็วครบวงจรในเครื่อง
ข้อควรระวัง
- ปัญหาพอร์ตชนกัน: ตรวจสอบว่า Node.js app ของคุณใช้พอร์ต (เช่น 8585 หรือ 8586) ที่ไม่ได้ถูกโปรแกรมอื่นใช้งาน ถ้าเจอ error port ซ้ำ ให้เปลี่ยนค่าตัวแปร
PORT
- ตั้งค่าเว็บไซต์ใน ServBay: เมื่อแก้ไข/เพิ่มเว็บไซต์ reverse proxy แล้ว ต้องแน่ใจว่า web server (Caddy หรือ Nginx) รีสตาร์ทและโหลด config ใหม่เรียบร้อย
- WebSocket Proxy: ตั้งค่า reverse proxy ของ ServBay รองรับ WebSocket อัตโนมัติ ถ้าเจอปัญหาเชื่อมต่อ WebSocket ให้ตรวจสอบ log หรือ config ของ Web server ใน ServBay ว่ารองรับ WebSocket proxy หรือไม่
- Firewall: ตรวจสอบว่า firewall ของระบบคุณไม่ได้บล็อคพอร์ตที่ ServBay ใช้ (ปกติ 80, 443) หรือพอร์ตของ Node.js app