DDN ( Daily Dev Notes )
8 subscribers
4 photos
12 links
Download Telegram
🟢 راه‌اندازی Node.js و Socket.IO روی هاست اشتراکی (cPanel) بخش اول
اگه بخوایم Socket.IO رو روی هاست اشتراکی اجرا کنیم، معمولاً اولین چالش نصب پکیج‌ها و بعد از اون تنظیم مسیرهای Socket.IO هست. توی این آموزش قدم‌به‌قدم می‌بینیم چطور میشه یه اپ Express به همراه Socket.IO رو روی هاست اشتراکی راه‌اندازی کرد.
۱. ساخت اپلیکیشن Node.js
اول از داخل Application Manager یه اپ Node.js جدید می‌سازیم:
آدرس اپ: مثلاً testing
Startup File: app.js
نسخه Node.js: متناسب با نیاز پروژه
بعد از ساخت اپ، پوشه پروژه ایجاد میشه و می‌تونیم فایل‌های مورد نیازمون رو داخلش قرار بدیم.
۲. نصب Dependency ها
بعضی وقت‌ها ممکنه نصب Dependency ها از داخل cPanel امکان‌پذیر نباشه؛ مثلاً زمانی که دسترسی به رجیستری پیش‌فرض npm وجود نداره یا اینترنت بین‌الملل با اختلال مواجه شده.
در این شرایط می‌تونیم داخل پوشه پروژه یک فایل .npmrc ایجاد کنیم و رجیستری مورد نظرمون رو به npm معرفی کنیم.
مثلاً برای استفاده از رجیستری چابکان:
registry=https://mirror2.chabokan.net/npm/

بعد از ذخیره فایل، دوباره از داخل cPanel سعی می‌کنیم Dependency ها رو نصب کنیم.
اگر باز هم cPanel از رجیستری جدید استفاده نکرد، باید نصب رو به صورت دستی انجام بدیم.
اگر به Terminal یا SSH دسترسی داشته باشیم که کار خیلی ساده است:
npm install express socket.io

اما روی بعضی هاست‌های اشتراکی دسترسی SSH وجود نداره.
راه‌حلی که من استفاده کردم این بود که داخل package.json یک اسکریپت برای نصب Dependency ها تعریف کردم:
{
"scripts": {
"npm-install": "npm install"
}
}

بعد از داخل cPanel و بخش Run JS Script اسکریپت npm-install رو اجرا کردم و npm تمام پکیج‌ها رو نصب کرد.
نمونه خروجی موفق:
returncode: 0

stdout:

> node-test@1.0.0 npm-install
> npm install

added 22 packages, and audited 91 packages in 5s

16 packages are looking for funding
run `npm fund` for details

found 0 vulnerabilities

stderr:

وقتی خروجی مشابه این رو ببینیم یعنی Dependency ها با موفقیت نصب شدن و می‌تونیم سراغ مرحله بعدی یعنی راه‌اندازی Socket.IO بریم.

—————-
@DDNotes
—————-
#NodeJS #SocketIO #WebSocket #cPanel #SharedHosting #ExpressJS #JavaScript #Backend #Realtime #توسعه_وب
🟢 راه‌اندازی Node.js و Socket.IO روی هاست اشتراکی (cPanel) - بخش دوم
توی پست قبلی اپلیکیشن Node.js رو ساختیم و Dependency ها رو نصب کردیم. حالا اگه بخوایم Socket.IO رو روی هاست اشتراکی اجرا کنیم، باید بدونیم که معمولاً Node.js روی cPanel پشت Passenger اجرا میشه و با VPS تفاوت‌هایی داره.
۱. ساخت فایل app.js
اول یه فایل app.js داخل پوشه پروژه می‌سازیم:
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);

اینجا Express و Socket.IO رو مقداردهی اولیه کردیم.
۲. تنظیم Socket.IO
حالا باید Socket.IO رو به سرور HTTP متصل کنیم:
const io = new Server(server, {
cors: {
origin: '*',
},
path: '/testing/socket.io',
});

نکته مهم اینه که مقدار path باید با آدرس اپلیکیشنی که داخل cPanel ساختیم هماهنگ باشه.
فرض کنید اپلیکیشن رو روی آدرس زیر ساخته باشیم:
https://yourdomain.com/testing

در این حالت مسیر Socket.IO باید چیزی شبیه این باشه:
/testing/socket.io

۳. ثبت Route تست
برای اینکه مطمئن بشیم Express درست کار می‌کنه، یه Route تست تعریف می‌کنیم:
app.get('/testing/node-test', (req, res) => {
res.send('Node.js application is working');
});

بعد از Restart کردن اپلیکیشن، با باز کردن این آدرس باید پیام بالا نمایش داده بشه:
https://yourdomain.com/testing/node-test

اگر این صفحه باز شد یعنی Node.js و Express بدون مشکل در حال اجرا هستند.
۴. مدیریت اتصال کاربران
حالا می‌تونیم اولین Event مربوط به Socket.IO رو تعریف کنیم:
io.on('connection', socket => {
console.log('New Client Connected');

socket.emit(
'server-message',
'Socket.IO connection successful'
);
});

هر بار که یک کاربر متصل بشه، این Event اجرا میشه و یک پیام تست برای کلاینت ارسال می‌کنه.
۵. نکته مهم Passenger
روی اکثر هاست‌های اشتراکی نباید از:
server.listen(...)

استفاده کنیم.
Passenger خودش سرور رو مدیریت می‌کنه و معمولاً فقط کافیه در انتهای فایل بنویسیم:
module.exports = server;

بعد از ذخیره فایل، اپلیکیشن رو Restart کنید تا تغییرات اعمال بشن.
در پست بعدی اتصال کلاینت، تست WebSocket و رفع خطای معروف 404 مربوط به Socket.IO رو بررسی می‌کنیم.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #Express #cPanel #SharedHosting #WebSocket #Backend #JavaScript #آموزش_برنامه_نویسی #توسعه_وب
🟢 راه‌اندازی Node.js و Socket.IO روی هاست اشتراکی (cPanel) - بخش سوم
تا اینجا سرور Node.js و Socket.IO رو راه‌اندازی کردیم. حالا اگه بخوایم مطمئن بشیم WebSocket واقعاً کار می‌کنه، باید یه کلاینت تست بسازیم.
۱. اضافه کردن کلاینت Socket.IO
داخل صفحه HTML تست:
<script src="https://cdn.socket.io/4.8.1/socket.io.min.js"></script>

و بعد:
const socket = io({
path: '/testing/socket.io',
});

دقت کنید که مقدار path باید دقیقاً با مقداری که روی سرور تنظیم کردیم یکسان باشه.
۲. دریافت پیام سرور
برای تست اتصال:
socket.on('server-message', message => {
console.log(message);
});

اگر همه چیز درست باشه باید داخل Console مرورگر پیام زیر رو ببینید:
Socket.IO connection successful

۳. خطای معروف 404
یکی از رایج‌ترین خطاهایی که روی هاست اشتراکی دیده میشه اینه:
GET /socket.io/?EIO=4&transport=polling 404

این خطا معمولاً یکی از این دلایل رو داره:
مسیر path روی سرور و کلاینت یکسان نیست.
اپلیکیشن بعد از تغییرات Restart نشده.
درخواست‌ها به جای /testing/socket.io به /socket.io ارسال میشن.
فایل Startup اشتباه انتخاب شده.
۴. بررسی لاگ‌ها
اگر اتصال برقرار نشد، لاگ‌های Node.js داخل cPanel بهترین محل برای پیدا کردن مشکل هستن.
معمولاً خطاهای زیر خیلی کمک می‌کنن:
Cannot find module ...

یا:
EADDRINUSE

یا:
404 Not Found

۵. تست نهایی
اگر:
Route تست Express باز میشه
خطای 404 ندارید
پیام Socket.IO دریافت میشه
یعنی WebSocket با موفقیت روی هاست اشتراکی شما راه‌اندازی شده 🎉
از اینجا به بعد می‌تونید چت آنلاین، نوتیفیکیشن لحظه‌ای، پنل ادمین Real-time و حتی سیستم Broadcast لاراول رو پیاده‌سازی کنید.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #WebSocket #cPanel #SharedHosting #ExpressJS #JavaScript #Backend #Realtime #توسعه_وب
📄 فایل نهایی app.js
اگر همه مراحل پست‌های قبلی رو انجام داده باشید، فایل نهایی می‌تونه چیزی شبیه نمونه زیر باشه:
const express = require('express');
const http = require('http');
const { Server } = require('socket.io');

const app = express();
const server = http.createServer(app);

const io = new Server(server, {
cors: {
origin: '*',
},
path: '/testing/socket.io',
});

app.get('/testing/node-test', (req, res) => {
res.send(`
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Socket.IO Test</title>
</head>
<body>
<h2>Socket.IO Connection Test</h2>

<div id="status">
Connecting...
</div>

<script src="https://cdn.socket.io/4.8.1/socket.io.min.js"></script>

<script>
const socket = io({
path: '/testing/socket.io'
});

socket.on('connect', () => {
document.getElementById('status').innerHTML =
' Connected Successfully';
});

socket.on('server-message', message => {
console.log(message);

document.getElementById('status').innerHTML =
' ' + message;
});

socket.on('disconnect', () => {
document.getElementById('status').innerHTML =
' Disconnected';
});
</script>
</body>
</html>
`);
});

io.on('connection', socket => {
console.log('New Client Connected');

socket.emit(
'server-message',
'Socket.IO connection successful'
);

socket.on('disconnect', () => {
console.log('Client Disconnected');
});
});

module.exports = server;

بعد از ذخیره فایل:
اپلیکیشن رو Restart کنید.
آدرس زیر رو باز کنید:
https://yourdomain.com/testing/node-test

اگر پیام:
 Socket.IO connection successful

نمایش داده شد یعنی هم Express و هم Socket.IO روی هاست اشتراکی شما با موفقیت در حال کار هستند.
💡 فراموش نکنید که مقدار /testing باید با Application URL که داخل cPanel ساخته‌اید یکسان باشد. اگر مثلاً اپلیکیشن را روی /node-app ساخته باشید باید تمام مسیرها را متناسب با آن تغییر دهید.
—————-
@DDNotes
—————-
#NodeJS #SocketIO #Express #cPanel #SharedHosting #WebSocket #JavaScript #Backend #Realtime #توسعه_وب