Autor del tema
#0
Socket.io, web uygulamaları için gerçek zamanlı iletişim sağlayan güçlü bir kütüphanedir. Ancak, veritabanı ile etkileşimde bulunurken asenkron (async/await) yapıyı doğru kullanmak oldukça önemlidir. Bu yazıda, Socket.io ile MySQL veya MariaDB kullanarak veritabanına kayıt yaparken karşılaşılabilecek yaygın hataları ve bunların kesin çözümlerini ele alacağız.
Öncelikle, Socket.io ile bir istemci bağlantısı kurduğumuzda genellikle bir "event" dinleyici tanımlarız. Örneğin, kullanıcıların bir form aracılığıyla veri göndermesi durumunda bu verilerin veritabanına kaydedilmesi gereken bir senaryo düşünelim:
Bu kodda dikkat edilmesi gereken birkaç nokta bulunmaktadır:
Örneğin, veritabanı bağlantısını şöyle yönetebiliriz:
Bu şekilde, veritabanı bağlantımızı bir havuzda tutarak performans sorunlarını önlemiş oluruz.
Sonuç olarak, Socket.io ile MySQL/MariaDB kullanarak veritabanına kayıt işlemleri yaparken asenkron yapıyı doğru bir şekilde yönetmek, uygulamanızın stabilitesi açısından kritik öneme sahiptir. Asenkron hataların üstesinden gelmek için
Öncelikle, Socket.io ile bir istemci bağlantısı kurduğumuzda genellikle bir "event" dinleyici tanımlarız. Örneğin, kullanıcıların bir form aracılığıyla veri göndermesi durumunda bu verilerin veritabanına kaydedilmesi gereken bir senaryo düşünelim:
CODE
123456789socket.on('sendData', async (data) => {
try {
await db.query('INSERT INTO users SET ?', data);
socket.emit('dataSaved', { success: true });
} catch (error) {
console.error('Veritabanı kaydı hatası:', error);
socket.emit('dataSaved', { success: false, error: error.message });
}
});Bu kodda dikkat edilmesi gereken birkaç nokta bulunmaktadır:
- Asenkron Yapı:
asyncanahtar kelimesini kullanarak fonksiyonu asenkron hale getiriyoruz. Bu,awaitile kullanacağımız veritabanı sorgusunun tamamlanmasını bekleyebilmemizi sağlar.
- Hata Yönetimi:
try-catchbloğu, veritabanı sorgusu sırasında bir hata oluşursa bunu yakalamamıza ve istemciye uygun bir yanıt göndermemize yardımcı olur.
- Veritabanı Bağlantısı: Veritabanı bağlantısı her istemci isteğinde açılıp kapanmamalıdır. Bunun yerine, uygulamanın başında bir kez açılıp, gerektiğinde kullanılmalıdır.
Örneğin, veritabanı bağlantısını şöyle yönetebiliriz:
CODE
1234567const mysql = require('mysql2/promise');
const db = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'yourpassword',
database: 'yourdatabase'
});Bu şekilde, veritabanı bağlantımızı bir havuzda tutarak performans sorunlarını önlemiş oluruz.
Sonuç olarak, Socket.io ile MySQL/MariaDB kullanarak veritabanına kayıt işlemleri yaparken asenkron yapıyı doğru bir şekilde yönetmek, uygulamanızın stabilitesi açısından kritik öneme sahiptir. Asenkron hataların üstesinden gelmek için
try-catch kullanmak ve veritabanı bağlantısını verimli bir şekilde yönetmek, bu sürecin en önemli parçalarıdır.