إنشاء وتشغيل مشروع Socket.io
ما هو Socket.io؟
Socket.io هي مكتبة JavaScript تستخدم للتواصل الفوري ثنائي الاتجاه القائم على الأحداث. يمكنها إقامة قناة تواصل فعّالة ومنخفضة التأخير بين المتصفح والخادم. تدعم Socket.io بروتوكول WebSocket، لكنها لا تقتصر على ذلك، حيث يمكنها اختيار آلية النقل الأمثل (مثل الاستطلاع الطويل) لضمان استقرار الاتصال.
الميزات والفوائد الرئيسية لـ Socket.io
- التواصل الفوري: يدعم التواصل الفوري ثنائي الاتجاه، وهو مناسب لتطبيقات الدردشة، الألعاب عبر الإنترنت، الإشعارات الفورية، وغيرها.
- الدعم عبر الأنظمة المختلفة: يمكن أن تعمل على المتصفح، Node.js، والمنصات الأخرى.
- إعادة الاتصال التلقائية: تحاول إعادة الاتصال تلقائيًا عند انقطاع الاتصال.
- التواصل بواسطة الأحداث: يتم التواصل عبر آلية الأحداث، مما يبسط نموذج البرمجة.
- التوافق العالي: يدعم العديد من آليات النقل مثل WebSocket وXHR الطويل، لضمان العمل الطبيعي في بيئات الشبكة المختلفة.
باستخدام Socket.io، يمكن للمطورين بناء تطبيقات تواصل فوري عالية الفعالية بسرعة.
استخدام ServBay لإنشاء وتشغيل مشروع Socket.io
في هذه المقالة، سنستخدم بيئة Node.js المقدمة من ServBay لإنشاء وتشغيل مشروع Socket.io. سنستخدم ميزة 'المضيف' في ServBay لإعداد خادم الويب والوصول إلى المشروع عن طريق الوكيل العكسي.
إنشاء مشروع Socket.io
تهيئة المشروع
أولاً، تأكد من أنك قد قمت بتثبيت بيئة Node.js المقدمة من ServBay. ثم، قم بإنشاء مشروع Socket.io جديد في دليل الجذر المقترح لـ ServBay
/Applications/ServBay/www
: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 لإدارة والوصول إلى مشروعك، وربطت أنواعًا متنوعة من قواعد البيانات.