Tạo và chạy dự án Socket.io
Socket.io là gì?
Socket.io là một thư viện JavaScript dùng cho giao tiếp sự kiện song song thời gian thực. Nó có thể tạo ra một kênh giao tiếp nhanh chóng giữa trình duyệt và máy chủ với độ trễ thấp. Socket.io hỗ trợ giao thức WebSocket, nhưng không chỉ dừng lại ở đó, nó còn có thể tự động chọn cơ chế truyền tải tốt nhất (như long-polling) để đảm bảo kết nối ổn định.
Các tính năng chính và ưu điểm của Socket.io
- Giao tiếp thời gian thực: Hỗ trợ giao tiếp song song thời gian thực, phù hợp cho các ứng dụng như chatroom, game trực tuyến, thông báo thời gian thực, v.v.
- Hỗ trợ đa nền tảng: Có thể chạy trên trình duyệt, Node.js và các nền tảng khác.
- Kết nối lại tự động: Tự động cố gắng kết nối lại khi kết nối bị mất.
- Dựa trên sự kiện: Giao tiếp thông qua cơ chế sự kiện, đơn giản hóa mô hình lập trình.
- Tương thích cao: Hỗ trợ nhiều cơ chế truyền tải như WebSocket, XHR long-polling, v.v., đảm bảo hoạt động tốt trong mọi môi trường mạng.
Sử dụng Socket.io, có thể giúp các nhà phát triển nhanh chóng xây dựng các ứng dụng giao tiếp thời gian thực hiệu quả.
Tạo và chạy dự án Socket.io bằng ServBay
Trong bài viết này, chúng ta sẽ sử dụng môi trường Node.js do ServBay cung cấp để tạo và chạy một dự án Socket.io. Chúng ta sẽ sử dụng tính năng 'máy chủ' của ServBay để thiết lập máy chủ Web và truy cập dự án thông qua reverse proxy.
Tạo dự án Socket.io
Khởi tạo dự án
Trước tiên, bạn hãy đảm bảo đã cài đặt môi trường Node.js do ServBay cung cấp. Sau đó, trong thư mục gốc đề xuất của ServBay
/Applications/ServBay/www
, tạo một dự án Socket.io mới:bashcd /Applications/ServBay/www mkdir servbay-socketio-app cd servbay-socketio-app npm init -y npm install express socket.io
1
2
3
4
5Tạo tệp máy chủ
Trong thư mục gốc của dự án, tạo một tệp
server.js
và thêm mã sau:javascriptconst express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socketIo(server); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { console.log('a user connected'); socket.on('disconnect', () => { console.log('user disconnected'); }); socket.on('chat message', (msg) => { io.emit('chat message', msg); }); }); const port = process.env.PORT || 3000; server.listen(port, () => { console.log(`Server running on port ${port}`); });
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
26Tạo tệp khách hàng
Trong thư mục gốc của dự án, tạo một tệp
index.html
và thêm mã sau:html<!DOCTYPE html> <html> <head> <title>Socket.io Chat với ServBay</title> <style> ul { list-style-type: none; padding: 0; } li { padding: 8px; margin-bottom: 10px; background-color: #f3f3f3; } input { padding: 10px; width: 300px; } button { padding: 10px; } .servbay-banner { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; font-size: 20px; margin-bottom: 20px; } </style> </head> <body> <div class="servbay-banner">Chào mừng bạn đến với ServBay Socket.io Chat!</div> <ul id="messages"></ul> <form id="form" action=""> <input id="input" autocomplete="off" /><button>Gửi</button> </form> <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); var form = document.getElementById('form'); var input = document.getElementById('input'); form.addEventListener('submit', function(e) { e.preventDefault(); if (input.value) { socket.emit('chat message', input.value); input.value = ''; } }); socket.on('chat message', function(msg) { var item = document.createElement('li'); item.textContent = msg; document.getElementById('messages').appendChild(item); 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
Chuyển sang chế độ phát triển
Chạy máy chủ phát triển
Khởi động máy chủ phát triển và chỉ định cổng (ví dụ: 8585):
bashPORT=8585 node server.js
1Việc này sẽ khởi động một máy chủ phát triển trên địa phương và mở cổng 8585.
Cấu hình reverse proxy của ServBay
Sử dụng tính năng 'máy chủ' của ServBay, cấu hình reverse proxy để truy cập máy chủ phát triển. Trong cài đặt 'máy chủ' của ServBay, thêm một reverse proxy mới:
- Tên:
Trang phát triển đầu tiên của Socket.io
- Tên miền:
servbay-socketio-test.dev
- Loại máy chủ:
Reverse Proxy
- IP:
127.0.0.1
- Cổng:
8585
Tham khảo thêm cài đặt trang web phát triển Nodejs.
- Tên:
Truy cập chế độ phát triển
Mở trình duyệt, truy cập
https://servbay-socketio-test.dev
để xem dự án trong thời gian thực. Do ServBay hỗ trợ tên miền tùy chỉnh và chứng chỉ SSL miễn phí, bạn sẽ được bảo mật cao hơn.
Triển khai phiên bản sản xuất
Chuẩn bị môi trường sản xuất
Đảm bảo dự án của bạn chạy tốt trên môi trường sản xuất. Thông thường, dự án Socket.io không đòi hỏi bước xây dựng đặc biệt, nhưng bạn có thể cần cấu hình một số biến môi trường hoặc thực hiện các cấu hình khác.
Chạy máy chủ sản xuất
Khởi động máy chủ sản xuất và chỉ định cổng (ví dụ: 8586):
bashPORT=8586 NODE_ENV=production node server.js
1Cấu hình reverse proxy của ServBay
Sử dụng tính năng 'máy chủ' của ServBay, cấu hình reverse proxy để truy cập máy chủ sản xuất. Trong cài đặt 'máy chủ' của ServBay, thêm một reverse proxy mới:
- Tên:
Trang sản xuất đầu tiên của Socket.io
- Tên miền:
servbay-socketio-test.prod
- Loại máy chủ:
Reverse Proxy
- IP:
127.0.0.1
- Cổng:
8586
- Tên:
Truy cập chế độ sản xuất
Mở trình duyệt, truy cập
https://servbay-socketio-test.prod
để xem phiên bản sản xuất. Với tên miền tùy chỉnh của ServBay và chứng chỉ SSL miễn phí, trang web của bạn sẽ có độ bảo mật và độ tin cậy cao hơn.
Kết nối cơ sở dữ liệu
ServBay hỗ trợ các cơ sở dữ liệu Redis, MariaDB, PostgreSQL và MongoDB. Dưới đây là cách kết nối các cơ sở dữ liệu này.
Kết nối MongoDB
Cài đặt
mongoose
:bashnpm install mongoose
1Sau đó, trong dự án, nhập và kết nối:
javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-socketio-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB connected')) .catch(err => console.log(err));
1
2
3
4
5Kết nối Redis
Cài đặt
redis
:bashnpm install redis
1Sau đó, trong dự án, nhập và kết nối:
javascriptconst redis = require('redis'); const client = redis.createClient(); client.on('error', function (err) { console.log('Error ' + err); }); client.on('connect', function () { console.log('Redis client connected'); });
1
2
3
4
5
6
7
8
9
10Kết nối MariaDB
Cài đặt
mariadb
:bashnpm install mariadb
1Sau đó, trong dự án, nhập và kết nối:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_socketio_app' }); pool.getConnection() .then(conn => { console.log("Connected to MariaDB"); conn.release(); //release to pool }) .catch(err => { console.log("Not connected due to error: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Kết nối PostgreSQL
Cài đặt
pg
:bashnpm install pg
1Sau đó, trong dự án, nhập và kết nối:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', host: 'localhost', database: 'servbay_socketio_app', password: 'password', port: 5432, }); pool.connect((err, client, done) => { if (err) throw err; console.log('Connected to PostgreSQL'); done(); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Thông qua các bước ở trên, bạn đã thành công tạo và chạy một dự án Socket.io, đồng thời sử dụng các tính năng của ServBay để quản lý và truy cập dự án của bạn cùng với kết nối nhiều cơ sở dữ liệu.