创建并运行 Socket.io 项目
什么是 Socket.io?
Socket.io 是一个用于实时双向事件驱动通信的 JavaScript 库。它可以在浏览器和服务器之间建立高效、低延迟的通信通道。Socket.io 支持 WebSocket 协议,但不仅限于此,它还可以自动选择最佳的传输机制(如长轮询)以确保连接的稳定性。
Socket.io 的主要特性和优势
- 实时通信:支持实时双向通信,适用于聊天室、在线游戏、实时通知等应用场景。
- 跨平台支持:可以在浏览器、Node.js 和其他平台上运行。
- 自动重连:在连接断开时自动尝试重新连接。
- 事件驱动:通过事件机制进行通信,简化了编程模型。
- 高兼容性:支持多种传输机制,如 WebSocket、XHR 长轮询等,确保在各种网络环境下都能正常工作。
使用 Socket.io,可以帮助开发者快速构建高效的实时通信应用。
使用 ServBay 创建并运行 Socket.io 项目
在这篇文章中,我们将使用 ServBay 提供的 Node.js 环境来创建并运行一个 Socket.io 项目。我们将使用 ServBay 的『主机』功能来设置 Web 服务器,并通过反向代理来实现项目的访问。
创建 Socket.io 项目
初始化项目
首先,确保您已经安装了 ServBay 提供的 Node.js 环境。然后,在 ServBay 建议的网站根目录
/Applications/ServBay/www
中创建一个新的 Socket.io 项目:bashcd /Applications/ServBay/www mkdir servbay-socketio-app cd servbay-socketio-app npm init -y npm install express socket.io
1
2
3
4
5创建服务器文件
在项目根目录下创建一个
server.js
文件,并添加以下代码: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
26创建客户端文件
在项目根目录下创建一个
index.html
文件,并添加以下代码:html<!DOCTYPE html> <html> <head> <title>Socket.io Chat with 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">Welcome to ServBay Socket.io Chat!</div> <ul id="messages"></ul> <form id="form" action=""> <input id="input" autocomplete="off" /><button>Send</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
进入开发模式
运行开发服务器
启动开发服务器并指定端口(例如:8585):
bashPORT=8585 node server.js
1这将会在本地启动一个开发服务器,并暴露端口 8585。
配置 ServBay 主机反向代理
使用 ServBay 的『主机』功能,通过反向代理来访问开发服务器。在 ServBay 的『主机』设置中,添加一个新的反向代理:
- 名字:
My first Socket.io dev site
- 域名:
servbay-socketio-test.dev
- 主机类型:
反向代理
- IP:
127.0.0.1
- 端口:
8585
详细设置步骤请参考添加Nodejs开发的网站。
- 名字:
访问开发模式
打开浏览器,访问
https://servbay-socketio-test.dev
,实时查看项目。由于 ServBay 支持自定义域名以及免费的 SSL 证书,您将享受到更高的安全性。
部署生产版本
准备生产环境
确保您的项目在生产环境中可以正常运行。通常,Socket.io 项目不需要特别的构建步骤,但您可能需要设置一些环境变量或进行其他配置。
运行生产服务器
启动生产服务器并指定端口(例如:8586):
bashPORT=8586 NODE_ENV=production node server.js
1配置 ServBay 主机反向代理
使用 ServBay 的『主机』功能,通过反向代理来访问生产服务器。在 ServBay 的『主机』设置中,添加一个新的反向代理:
- 名字:
My first Socket.io production site
- 域名:
servbay-socketio-test.prod
- 主机类型:
反向代理
- IP:
127.0.0.1
- 端口:
8586
- 名字:
访问生产模式
打开浏览器,访问
https://servbay-socketio-test.prod
,查看生产版本。通过 ServBay 的自定义域名和免费的 SSL 证书,您的网站将具有更高的安全性和可信度。
数据库连接
ServBay 提供了 Redis、MariaDB、PostgreSQL 和 MongoDB 数据库支持。以下是如何连接这些数据库的示例。
连接 MongoDB
安装
mongoose
:bashnpm install mongoose
1然后在项目中引入并连接:
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
5连接 Redis
安装
redis
:bashnpm install redis
1然后在项目中引入并连接:
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
10连接 MariaDB
安装
mariadb
:bashnpm install mariadb
1然后在项目中引入并连接:
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
16连接 PostgreSQL
安装
pg
:bashnpm install pg
1然后在项目中引入并连接:
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
通过以上步骤,您成功创建并运行了一个 Socket.io 项目,并使用 ServBay 提供的功能来管理和访问您的项目,同时连接了多种数据库。