Ana içeriğe geç

PM2 ile Kullanım

PM2, Node.js uygulamaları için yerleşik bir yük dengeleyici ile birlikte bir üretim süreç yöneticisidir. Uygulamaları sonsuza kadar canlı tutmanıza, kesinti olmadan yeniden yüklemenize ve yaygın sistem yöneticisi görevlerini kolaylaştırmanıza olanak tanır.

Belgelerine buradan ulaşabilirsiniz: PM2 Belgeleri

PM2 ile bir Socket.IO sunucusunu ölçeklendirmek için üç çözüm vardır:

  • İstemci tarafında HTTP uzun süreli sorgulamayı devre dışı bırakma:

    const socket = io({
    transports: ["websocket"]
    });

    Bu durumda, WebSocket bağlantısı kurulamazsa HTTP uzun süreli sorgulamaya geri düşme olmayacaktır.

  • Her işçi için ayrı bir port kullanmak ve önünde nginx gibi bir yük dengelemesi yapmak.

  • @socket.io/pm2 kullanmak.

Kurulum

npm install -g @socket.io/pm2

Eğer pm2 zaten kuruluysa, önce onu kaldırmanız gerekir:

npm remove -g pm2

@socket.io/pm2, pm2 için bir doğrudan yedek olarak kullanılabilir ve pm2 aracının tüm komutlarını destekler.

Tek fark bu committen kaynaklanmaktadır.

Kullanım

worker.js

const { createServer } = require("http");
const { Server } = require("socket.io");
const { createAdapter } = require("@socket.io/cluster-adapter");
const { setupWorker } = require("@socket.io/sticky");

const httpServer = createServer();
const io = new Server(httpServer);

io.adapter(createAdapter());

setupWorker(io);

io.on("connection", (socket) => {
console.log(`connect ${socket.id}`);
});

ecosystem.config.js

module.exports = {
apps : [{
script : "worker.js",
instances : "max",
exec_mode : "cluster"
}]
}

Ve ardından pm2 start ecosystem.config.js (veya pm2 start worker.js -i 0) komutunu çalıştırın. Hepsi bu kadar! Artık Socket.IO kümesine 8080 portundan ulaşabilirsiniz.

Nasıl Çalışır

Birden Fazla Düğüme Ölçeklenirken yapılması gereken iki şey vardır:

  • Yapışkan oturumları etkinleştirmek, böylece bir Socket.IO oturumunun HTTP isteklerinin aynı işçiye yönlendirilmesi.
  • Paketlerin tüm istemcilere iletilmesi için özel bir adaptör kullanmak, hatta başka bir işçiye bağlı olsalar bile.

Bunu başarmak için @socket.io/pm2, iki ek paket içerir:

pm2 ile tek fark bu committen kaynaklanmaktadır:

  • God süreci artık kendi HTTP sunucusunu oluşturur ve HTTP isteklerini doğru işçiye yönlendirir.
  • God süreci ayrıca işçiler arasında paketleri tekrar iletir, böylece io.emit() tüm istemcilere doğru ulaşır.

Birden fazla PM2 kümesi çalıştıran birçok sunucunuz varsa, Redis adaptörü gibi başka bir adaptör kullanmanız gerekeceğini lütfen unutmayın.

Fork'un kaynak kodu burada bulunabilir. pm2 paketinin sürümlerini yakından takip etmeye çalışacağız.