Oyundaki Kullanıcıların Oturum Yönetimi - NOY#3

noyjavascriptoyunyoutube

1 yıl önce 1 yorum

Oyunun ne gibi bir mimarisi olacağını az çok tahmin etmiş olabilirsiniz. Sonuçta satranç 2 kişi ile oynanan bir oyun. Kişilerin kendilerine ait süreleri olabilir, oyunu süresiz açabilir vs. Bizim bu konuda yapmamız gereken oyunun back-end işlerini bitirip bunları işlemek. Node.js tarafında yapılacak çok iş var gibi görünüyor. Çünkü bir API yapılmalı ve kullanıcılar arasında tamamen sorunsuz bir şekilde çalışabilen bir yönetim olmalı. Oyunda kullanıcıların hile yapamaması gerekiyor. Daha fazla kafamızı yormadan oturumu nasıl yöneteceğimize geçelim :)

Öncelikle Node.js dünyasına geçiyorsak request response sistemini kullanacağımızı bilmeliyiz. Yani istek yanıt sistemi. npm üzerinde express adında bir modül var. Bu modül Node.js'in http modülünü kullanarak normalde yapılması gereken iş yükünü kütüphanesi sayesinde düşürüyor. Ben tabi kütüphane fanatiği birisi değilimdir sadece topluluğun genel tercihlerini kullanmayı severim :)

Artık projemizi başlatmanın zamanı geldi. Hemen herhangi bir yere dizin oluşturalım. (NOT: bu adımları yapmanıza gerek yok anlattıktan sonra açıklayacağım)

$ cd ~
$ mkdir satranc
$ cd satranc

Bu dizinde herşeyden önce npm ile package.json oluşturalım

$ npm init --ff

Ardından oluşan package.json dosyasını güncelliyorum 

{
  "name": "satranc",
  "version": "1.0.0",
  "description": "Node.js ile satranç yazmak serisinin projesi",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "satranc",
    "chess",
    "avarekodcu",
    "game",
    "oyun"
  ],
  "author": "Avare Kodcu <abdurrahmaneker58@gmail.com>"
}

Dosyayı değiştirdiğimize göre bunu npm'e ve GitHub'a atabiliriz. İlk önce satranc ismindeki projemizi npm'e atıyoruz daha önce bu ismi alan olmadığı için benim bunu kullanma hakkım var. npm'e bu şekilde projeyi atıyorum ve 1.0.0 için attık.

$ npm publish
+ satranc@1.0.0
$

Artık burada: https://www.npmjs.com/package/satranc. Habi be, attıktan sonra fark ettim "oyun yazmak" olacak yeri "satranç yazmak" diye yazmışım :D neyse olsun bir sonraki versiyonda düzeltirim.

Şimdi sıra projeyi GitHub'a atmakta. GitHub üzerinde bir repo oluşturdum https://github.com/abdurrahmanekr/satranc şimdi bunu klasörümüze ekleyelim.

$ git init
$ git remote add origin https://github.com/abdurrahmanekr/satranc
$ git add .
$ git commit -m "first commit."
$ git push -u origin master

Yükleme tamam gibi

Bu işlemleri sizin yapmanıza gerek yok. Zaten bunu benim yapmam gerekiyor. Sadece bilgi olsun diye buraya ekliyorum. 

Yapmamız gereken ayarlamalardan biri de .gitignore dosyası.

$ touch .gitignore
$ vim .gitignore
/node_modules
/dist
~
~
:wq
$ 

Sanırsam bu kadardı.

Yükleme tamamlandığına göre Express kullanmanın zamanı!

Burada daha çok yapacağımız işi anlatacağım. express modülünün kullanımı hakkında birkaç makale okumak isterseniz:

emrekacan.net/nodejs-adim-9-express-framework/
emrekacan.net/nodejs-adim-10-express-framework-2/
yusufsezer.com.tr/node-js-express-modulu/

İlk önce express modülünü kuralım sonra server klasörünü oluşturalım.

$ npm install express --save-dev && mkdir server

Sonra server/index.js dosyasını oluşturalım ve basit olarak 3000 portuna sunalım:

const express = require('express');

// sunucumuzu oluşturalım
const app = express();
// yayınlayacağımız port
const port = 3000;


// sonra da yönlendirmeleri yapalım
app.get('/', (req, res) => {
    // kullanıcıya cevap olarak bunu döndürüyoruz
    res.send('Merhaba Satranç\'a Hoşgeldin!');
})

// uygulamayı yayınlıyoruz
app.listen(port, () => {
    console.log(`Uygulama ${port} portundan sunuluyor`);
})

Bundan sonra yapmamız gereken node ile başlatmak.

$ node server/index.js

localhost:3000/ adresine girdiğimizde bizi "Merhaba Satranç'a Hoşgeldin!" yanıtı karşılayacak.

Buraya kadar herşey tamam. Şimdi oturum kullanımını entegre edelim. express üzerinde oturumlar yönetmek için express-session modülünü kullanacağız. Kurmak için:

$ npm install express-session --save-dev

Şimdi ise bunu, express uygulamamızın içinde kalabalık etmemesi için index.js dosyasında değil server/uses.js dosyasında kullanalım.

const session = require('express-session');

module.exports = (app) => {
    // oturum modeli
    app.use(session({
        secret: "gizli-anahtar",
        resave: false,
        saveUninitialized: true,
    }));
};

Tabi bu modülü server/index.js dosyasında da kullanalım.

...
const uses = require('./uses');

// sunucumuzu oluşturalım
const app = express();
// yayınlayacağımız port
const port = 3000;


// uygulamamızın kullanması gereklenleri dahil ediyoruz
uses(app);

// sonra da yönlendirmeleri yapalım
app.get('/', (req, res) => {
    // kullanıcıya cevap olarak bunu döndürüyoruz
    res.send('Merhaba Satranç\'a Hoşgeldin!');
})
...

Modülümüzü tekrar açtığımızda tarayıcı cookie'si üzerine eklendiğini görebiliyoruz.

Hadi Redis kullanalım!

Redis bellekte çalışan bir NoSQL veritabanıdır ve gerçekten hızlıdır. Bizim kullanmamızın amacı oturumları sorunsuz bir şekilde yönetmek. Buradan detaylı bilgi edinebilirsiniz. 

Redis'i express üzerinde kullanmak için connect-redis kütüphanesini kullanacağız. Bu kütüphaneyi kullanmadan önce bilgisayarınıza redis'i kurmalısınız tabi:

Mac için:

$ brew install redis

(apt-get) Linux için:

$ sudo apt-get install redis-server

Yüklendikten sonra yapılması gereken tek şey:

$ redis-server &

Kuralım:

$ npm install connect-redis --save-dev
$ npm install redis --save-dev

Ardından server/uses.js dosyamızı şöyle düzenleyelim:

const session = require('express-session');
const redis = require('redis'); // bağlantı açmamız için gerekli bir kütüphane
const RedisStore = require('connect-redis')(session); // connect-redis'e express-session'u bağladık

module.exports = (app) => {
    // yeni bir redis istemcisi oluşturduk
    const client = redis.createClient();
    // oturum modeli
    app.use(session({
        store: new RedisStore({ // yeni bir redis bağlantısı
            client: client,
            host: 'localhost',
            port: 6379,
            ttl :  260
        }),
        secret: "gizli-anahtar",
        resave: false,
        saveUninitialized: true,
    }));
};

Redisle ilgili anlatacaklarım bu kadardı.

Bu haftaki bölüm bu kadardı bir sondaki bölümde görüşmek üzere :) Sorularınız varsa sormaktan çekinmeyin.

Yorumlar ({{totalCommentCount}})

  • feyyz özdemir

    {{commentLike90Count}} beğenme 4 ay önce

    hocam ellerinize sağlık ama keşke webgl veya herhangibir webgl framworkü kullansaydınız. ama gene de doyurucu olmuş. eğer webgl framworkü düşünürseniz. Babylon.js önerimdir.
    Beğen Beğendin
  • Düşündüklerin nedir ?

    Abdurrahman Eker

    (1010 Eylül 11111001100)

  • Full Stack Developer at Detaysoft Turkey/Sivas
  • İnternette Avare Kodcu
  • github
  • linkedin
  • youtube
  • Yeni içeriklerden haberdar olmak ister misin ?