Ana içeriğe geç

Bellek Kullanımı

Socket.IO sunucunuzun tükettiği kaynaklar esasen şunlara bağlıdır:

  • bağlı olan istemci sayısı
  • alınan ve gönderilen mesajların (temel yayma, onay ile yayma ve yayın) saniye başına sayısı
bilgi

Socket.IO sunucusunun bellek kullanımı, bağlı olan istemci sayısıyla doğrusal olarak ölçeklenmelidir.

ipucu

Varsayılan olarak, her oturumun ilk HTTP isteğine bir referans bellekte tutulur. Bu referans, örneğin express-session ile çalışırken gereklidir (bkz. burada), ancak bellek tasarrufu sağlamak amacıyla atılabilir:

io.engine.on("connection", (rawSocket) => {
rawSocket.request = null;
});

Bu sayfada sunulan sonuçları yeniden üretmek için gereken kaynak kodunu oradan bulabilirsiniz.

Ayrıca bakınız:

  • Yük testleri
  • Performans ayarlama

WebSocket sunucu uygulamasına göre bellek kullanımı

Socket.IO sunucusunun bellek kullanımı, altındaki WebSocket sunucu uygulamasının bellek kullanımına büyük ölçüde bağlıdır.

Aşağıdaki grafik, 0'dan 10.000'e kadar olan bağlı istemci sayısıyla birlikte Socket.IO sunucusunun bellek kullanımını göstermektedir:

  • varsayılan olarak kullanılan ws paketine dayanan bir Socket.IO sunucusu
  • C++ WebSocket sunucu uygulamasına dayanan eiows paketine dayalı bir Socket.IO sunucusu (bkz. kurulum adımları)
  • C++ alternatif Node.js yerel HTTP sunucusuna dayanan µWebSockets.js paketine dayalı bir Socket.IO sunucusu (bkz. kurulum adımları)
  • ws paketine dayanan basit bir WebSocket sunucusu

WebSocket sunucu uygulamasına göre bellek kullanım grafiği

Ubuntu 22.04 LTS üzerinde, Node.js v20.3.0 ile, aşağıdaki paket versiyonlarıyla test edilmiştir:

  • socket.io@4.7.2
  • eiows@6.7.2
  • uWebSockets.js@20.33.0
  • ws@8.11.0

Zamana göre bellek kullanımı

Aşağıdaki grafik, 0'dan 10.000'e kadar olan bağlı istemcilerle birlikte Socket.IO sunucusunun zaman içindeki bellek kullanımını göstermektedir.

Zamana göre bellek kullanım grafiği

not

Gösterim amaçlı olarak, her istemci dalgasının sonunda çöp toplayıcıyı manuel olarak çağırıyoruz:

io.on("connection", (socket) => {
socket.on("disconnect", () => {
const lastToDisconnect = io.of("/").sockets.size === 0;
if (lastToDisconnect) {
gc();
}
});
});

Bu, son istemci bağlantısını kestiğinde bellek kullanımındaki temiz düşüşü açıklar. Bu, uygulamanızda gerekli değildir, çöp toplama otomatik olarak gerektiğinde tetiklenecektir.