Metin2 game, db ve auth Core Nedir? Server Files Core Yapısı Rehberi
Metin2 server files içerisinde game, db ve auth isimlerini görmeniz tesadüf değildir. Bunlar sunucunun farklı görevlerini üstlenen süreçleri ifade eder. Game core oyun dünyasını ve oyuncu işlemlerini yürütür, db core kalıcı oyun verilerinin aktarımı ve cache yönetiminde merkezi rol oynar, auth core ise oyuncunun sunucuya giriş ve kimlik doğrulama aşamasını yönetir.
Ancak Metin2’de “core” kelimesi yeni başlayanların düşündüğü gibi işlemcinin CPU çekirdeği anlamına gelmez. Buradaki core, çoğu zaman çalışan bir server process/instance anlamında kullanılır.
Dahası, klasik Metin2 source yapısında auth her zaman ayrı derlenen üçüncü bir binary değildir. Server source tipik olarak game ve db executable'larını üretir; game executable'ı uygun CONFIG ile authentication server modunda da çalıştırılabilir. Metin2 kaynak kodunda AUTH_SERVER yapılandırmasının g_bAuthServer durumunu aktifleştirmesi bunun açık örneğidir.
Hızlı Cevap
Metin2 game core, karakterler, haritalar, yaratıklar, savaş, quest ve oyun içi işlemleri çalıştıran server sürecidir.
DB core, game/auth süreçleri ile kalıcı veriler arasında veri aktarımı ve cache yönetiminde görev yapan db server sürecidir.
Auth core ise oyuncunun hesapla giriş yaptığı authentication sürecidir. Klasik source yapılarında çoğunlukla ayrı bir auth executable yerine game binary'si AUTH_SERVER yapılandırmasıyla auth modunda çalıştırılır.
Kısaca:
AUTH = Giriş kapısı
GAME = Oyun dünyası
DB = Kalıcı veri/cache koordinasyonu
Metin2'de Core Ne Demek?
Metin2 server files terminolojisinde core, çalışan bir server uygulaması örneği yani process olarak düşünülebilir.
Örneğin bir server yapısında:
auth
channel1/core1
channel1/core2
channel2/core1
game99
db
gibi klasörler görebilirsiniz.
Buradaki:
channel1/core1
ve:
channel1/core2
aynı game executable'ının farklı ayarlarla çalışan iki ayrı instance'ı olabilir.
Metin2 topluluk dokümantasyonunda server files yapısının auth server, dbcache ve channel core'lara bölünebildiği; her channel altında bir veya daha fazla game core bulunabildiği uzun süredir kullanılan yapı olarak açıklanmaktadır.
Dolayısıyla:
1 core = mutlaka 1 farklı program
demek doğru değildir.
Daha doğru ifade:
1 core = belirli görev ve yapılandırmayla çalışan server process'i
şeklindedir.
Metin2 Server Mimarisi Nasıl Çalışır?
Basitleştirilmiş yapı şöyle düşünülebilir:
OYUNCU CLIENT
│
▼
┌───────────┐
│ AUTH CORE │
│ Login │
└─────┬─────┘
│
Başarılı giriş
│
▼
┌─────────────────┐
│ GAME CORE │
│ CH1 / Core 1 │
│ Harita / Oyuncu │
└────────┬────────┘
│
GD / DG
│
▼
┌─────────┐
│ DB CORE │
│ Cache │
└────┬────┘
│
▼
MySQL / MariaDB
Gerçek Metin2 mimarisi bundan daha ayrıntılıdır.
Örneğin:
-
Game core'lar birbirleriyle P2P iletişimi kurabilir.
-
Auth süreci DB ve SQL sistemleriyle bağlantı kurabilir.
-
Game sürecinin bazı source sürümlerinde doğrudan SQL bağlantıları da bulunur.
-
DB core game core'lardan gelen belirli kalıcı veri işlemlerini cache üzerinden yönetir.
Metin2 network dokümantasyonunda game ile database core arasındaki paket yönleri açıkça:
GD = Game → Database
DG = Database → Game
olarak tanımlanır. Game-to-Game iletişimi de ayrı bir GG yönü olarak bulunur.
Metin2 Game Core Nedir?
Game core, Metin2'nin asıl oyun dünyasını çalıştıran server sürecidir.
Oyuncu karakterini seçip dünyaya girdikten sonra yapılan işlemlerin büyük bölümü game core tarafında yürütülür.
Örneğin:
-
Karakter hareketleri
-
Saldırılar
-
Skill kullanımı
-
Hasar hesaplamaları
-
Moblar
-
NPC'ler
-
Metin taşları
-
Bosslar
-
Quest işlemleri
-
Eşya kullanımı
-
Drop işlemleri
-
Haritalar
-
Ticaret
-
Shop sistemleri
-
PvP işlemleri
game server koduyla ilişkilidir.
Metin2 server source'unun derlenmesi sonucunda temel executable'lardan birinin game olduğu ve server tarafındaki oyun mantığının burada bulunduğu Metin2 source yapılarında görülebilir.
Game Core ile Channel Aynı Şey mi?
Hayır.
Bu ikisi çok sık karıştırılır.
Örneğin:
Channel 1
├── Core 1
├── Core 2
└── Core 3
olabilir.
Burada:
Channel = oyuncunun gördüğü kanal
Core = kanalın yükünü ve belirli haritalarını çalıştıran process
olarak düşünülebilir.
Bir channel tek game core ile çalışabileceği gibi farklı server files mimarilerinde birden fazla core'a bölünebilir.
Bir Channel Neden Birden Fazla Core Kullanır?
En önemli nedenlerden biri yük dağılımıdır.
Örneğin serverinizde:
CH1 Core 1
şu haritaları çalıştırabilir:
Map 1
Map 3
Map 21
Map 23
başka bir core ise:
CH1 Core 2
farklı haritaları çalıştırabilir.
Klasik CONFIG dosyalarında bunun için sıklıkla:
MAP_ALLOW:
yapısı kullanılır.
Kaynak kodda MAP_ALLOW değerlerinin okunup core tarafından izin verilen map index'lerinin bir sete eklendiği görülebilir. Auth modunda çalışan process'in ise map çalıştırmaması için ayrıca kontrol bulunur.
Örneğin temsili olarak:
HOSTNAME: ch1_core1
CHANNEL: 1
PORT: ...
P2P_PORT: ...
DB_ADDR: ...
DB_PORT: ...
MAP_ALLOW: 1 3 21 23
şeklinde bir yapı bulunabilir.
Portlar ve CONFIG içeriği kullandığınız server files/source sürümüne göre değişebilir.
Game Core İçerisinde MAP_ALLOW Ne İşe Yarar?
MAP_ALLOW, ilgili game process'inin hangi map index'lerini çalıştıracağını belirleyen önemli CONFIG seçeneklerinden biridir.
Örneğin:
MAP_ALLOW: 1 3 21 23
kullanılıyorsa ilgili core'un bu map index'leri için görevlendirilmiş olması amaçlanabilir.
Bu nedenle yeni bir harita eklediğiniz halde:
-
harita açılmıyorsa,
-
karakter haritaya ışınlanamıyorsa,
-
warp sonrası bağlantı kopuyorsa,
kontrol edilmesi gereken yerlerden biri ilgili game core'un MAP_ALLOW yapılandırmasıdır.
Ancak map tanımlamasında yalnızca MAP_ALLOW yeterli olmayabilir. Map index, locale/share dosyaları ve kullanılan server files yapısındaki diğer harita tanımları da doğru olmalıdır.
Game Core Çökerse Ne Olur?
Bu, core mimarisini anlamanın en büyük avantajlarından biridir.
Örneğin:
CH1 Core 2
çökerse çoğu yapıda öncelikle o process üzerinde çalışan haritalar ve oyuncular etkilenir.
Diğer:
CH1 Core 1
CH2 Core 1
process'leri çalışmaya devam edebilir.
Tam davranış server source'una ve kullanılan mimariye göre değişebilir.
Bu nedenle bir oyuncu:
“Server çöktü.”
dediğinde aslında bütün server değil sadece bulunduğu game core çökmüş olabilir.
Metin2 DB Core Nedir?
DB core, Metin2'nin db executable'ı üzerinden çalışan ve game/auth süreçleri ile kalıcı oyun verileri arasındaki veri akışında önemli görev üstlenen server process'idir.
DB core'u doğrudan:
MySQL
veya:
MariaDB
ile aynı şey sanmak büyük hatadır.
Bunlar farklı katmanlardır.
Basitleştirelim:
GAME CORE
│
▼
DB CORE
│
▼
MySQL / MariaDB
DB core bir Metin2 uygulamasıdır.
MySQL/MariaDB ise gerçek veritabanı yönetim sistemidir.
DB Core Ne İşe Yarar?
DB core'un önemli görevlerinden biri çeşitli oyun verilerinin cache ve aktarım işlemlerini yönetmektir.
Metin2 DB yapısının cache kullandığı, verilerin belirli sistemlerde başlangıçta okunarak core'lara dağıtılabildiği ve cache güncellemelerinin tekrar core'lara gönderilebildiği Metin2 geliştirme örneklerinde açıkça görülmektedir.
DB core ile ilişkili veriler source ve sistem yapısına göre şunları kapsayabilir:
-
Karakter verileri
-
Eşyalar
-
Oyuncu kayıtları
-
Lonca verileri
-
Safebox işlemleri
-
Item ID yönetimi
-
Player cache
-
Item cache
-
Proto verileri
-
Channel/core arasında ortak olması gereken kalıcı veriler
Tam kapsam kullanılan source sürümüne göre değişebilir.
DB Core Neden Cache Kullanır?
Her game işleminin doğrudan SQL sorgusu olarak veritabanına gönderilmesi verimsiz bir yapı oluşturabilir.
Bu nedenle Metin2'nin DB katmanında cache mekanizmaları bulunur.
Basit mantık:
Oyuncu item değiştirir
↓
Game core işlem yapar
↓
DB core/cache güncellenir
↓
Uygun zamanda kalıcı veritabanına yazılır
Bu anlatım sistemin tamamının birebir algoritması değil, cache mantığını anlamaya yönelik basitleştirilmiş modeldir.
DB cache'in önemini gösteren pratik örneklerden biri shutdown işlemidir. Metin2 geliştirme tartışmalarında cache'in düzgün flush edilmeden süreçlerin kapatılmasının item/veri kayıt problemleri ve rollback gibi riskler oluşturabileceği belirtilmektedir.
Bu yüzden production serverde:
kill -9
ile rastgele DB process öldürmek doğru shutdown yöntemi değildir.
DB Core ile MySQL Arasındaki Fark
| Özellik | DB Core | MySQL / MariaDB |
|---|---|---|
| Tür | Metin2 server uygulaması | Veritabanı yönetim sistemi |
| Binary | Genellikle db |
mysqld / MariaDB servisi |
| Game core ile iletişim | Evet | Mimariye bağlı |
| Cache yönetimi | Metin2'ye özel cache mekanizmaları | Veritabanının kendi cache mekanizmaları farklıdır |
| Item/player verileri | İşler ve aktarır | Kalıcı olarak tablolarda saklar |
| GD/DG packet | Evet | Hayır |
| Metin2 source parçası | Evet | Hayır |
Buradaki ayrım çok önemlidir.
“DB core çalışıyor” demek “MySQL kesin çalışıyor” anlamına gelmez.
Aynı şekilde:
“MySQL çalışıyor” demek DB core'un düzgün bağlandığı anlamına gelmez.
Game Core Doğrudan SQL'e Hiç Bağlanmaz mı?
Bu konuda internette sık yapılan aşırı basitleştirmelerden biri:
“Game sadece DB core'a bağlanır, SQL'e asla bağlanmaz.”
demektir.
Klasik Metin2 source örneklerinde game/config.cpp içerisinde:
PLAYER_SQL
COMMON_SQL
LOG_SQL
gibi yapılandırmaların okunduğu ve SQL bağlantılarının oluşturulduğu açıkça görülebilir. Aynı CONFIG içerisinde ayrıca:
DB_ADDR
DB_PORT
ile Metin2 DB core bağlantısı da tanımlanır.
Yani sistem:
Game → DB Core → SQL
şeklinde tek bir çizgiye indirgenecek kadar basit değildir.
Hangi verinin hangi katmandan geçtiği source sürümüne ve kullanılan sisteme göre değişebilir.
Metin2 Auth Core Nedir?
Auth core, oyuncunun kullanıcı adı ve şifresiyle sunucuya giriş yaptığı authentication sürecidir.
Temel görevi:
Oyuncu kim?
Hesap bilgileri doğru mu?
Giriş yapılabilir mi?
gibi authentication işlemlerini gerçekleştirmektir.
Ancak burada çok önemli teknik ayrıntı vardır:
Auth Her Zaman Ayrı Bir Binary Değildir
Klasik Metin2 source yapısında genellikle:
game
db
binary'leri derlenir.
Auth klasöründe de çoğu server files yapısında aynı:
game
binary'si kullanılabilir.
Farkı CONFIG belirler.
Örneğin:
AUTH_SERVER: master
gibi bir yapı kullanıldığında game process'i authentication server moduna geçebilir.
Kaynak kodda AUTH_SERVER token'ı okunduğunda:
g_bAuthServer = true
durumunun aktifleştirildiği ve process'in auth moduna göre farklı davranmaya başladığı görülebilir.
Bu yüzden teknik açıdan:
auth core = tamamen farklı program
demek her klasik server files için doğru değildir.
Daha doğru ifade:
Auth core, çoğu klasik yapıda game binary'sinin authentication göreviyle çalışan instance'ıdır.
Auth Core Ne İşe Yarar?
Auth süreci oyuncunun ilk bağlantı aşamasında görev yapar.
Basitleştirilmiş giriş akışı:
Client
↓
AUTH
↓
Hesap kontrolü
↓
Başarılı authentication
↓
Karakter / oyun sunucusu aşaması
↓
GAME CORE
Network dokümantasyonunda client'tan server core'a gönderilen login paketlerinin bulunduğu ve server tanımının authentication/game core'u kapsayabildiği belirtilmektedir.
Auth CONFIG Dosyasında Neler Görülebilir?
Server files sürümüne göre değişmekle birlikte auth CONFIG içerisinde örneğin şu tür ayarlar bulunabilir:
HOSTNAME: auth
CHANNEL: 1
PORT: ...
P2P_PORT: ...
DB_ADDR: 127.0.0.1
DB_PORT: ...
AUTH_SERVER: master
PLAYER_SQL: ...
COMMON_SQL: ...
Metin2 topluluklarındaki klasik 40k yapı örneklerinde AUTH_SERVER: master, DB_ADDR, DB_PORT, PLAYER_SQL ve COMMON_SQL gibi alanların auth CONFIG içerisinde kullanıldığı görülmektedir.
Gerçek:
-
port,
-
kullanıcı adı,
-
parola,
-
database adı,
-
IP,
değerleri kendi server files yapılandırmanıza göre belirlenmelidir.
İnternetten bulunan CONFIG'i doğrudan kopyalamak doğru değildir.
Auth Core Çökerse Ne Olur?
Auth core kapandığında temel olarak yeni authentication işlemleri aksar.
Oyuncular örneğin:
-
giriş yapamayabilir,
-
login ekranında kalabilir,
-
bağlantı hatası görebilir.
Buna karşılık zaten bir game core üzerinde oynayan oyuncuların anında düşüp düşmemesi source yapısına ve yaşanan arızaya bağlıdır.
Bu nedenle:
Oyundakiler oynuyor
ama yeni oyuncular giremiyor
durumunda auth tarafı incelenmesi gereken ilk yerlerden biridir.
game, db ve auth Arasındaki Temel Fark
| Core | Temel Görev | Yaygın Binary |
|---|---|---|
| Game Core | Oyun dünyası ve gameplay | game |
| DB Core | Kalıcı veri/cache koordinasyonu | db |
| Auth Core | Oyuncu authentication | Çoğu klasik yapıda game |
| MySQL/MariaDB | Kalıcı SQL veritabanı | Ayrı database servisi |
Bu tablo Metin2 server files yapısını anlamak için en önemli özetlerden biridir.
Client Giriş Yaptığında Core'lar Nasıl Çalışır?
Basitleştirilmiş bir oyuncu giriş süreci üzerinden ilerleyelim.
1. Client Auth'a Bağlanır
Oyuncu:
Kullanıcı Adı
Şifre
bilgileriyle login işlemini başlatır.
Authentication süreci hesap bilgilerini kontrol eder.
2. Giriş Onaylanır
Doğrulama başarılı olduğunda oyuncu sonraki aşamaya geçebilir.
3. Game Core'a Geçiş Yapılır
Oyuncunun karakterinin bulunduğu oyun dünyası ilgili game core tarafından yönetilir.
4. Karakter Verileri Yüklenir
Game ve DB katmanları arasında karakter/eşya gibi gerekli bilgiler aktarılır.
Metin2 network yapısında bu iletişimin önemli bölümü:
GD
DG
paketleri üzerinden tanımlanmıştır.
5. Oyuncu Haritaya Girer
Artık:
-
hareket,
-
mob,
-
skill,
-
PvP,
-
quest,
-
drop,
gibi gameplay işlemleri ilgili game core üzerinde yürütülür.
GD ve DG Nedir?
Server source incelemeye başlayanların karşılaşacağı önemli iki kısaltmadır.
GD
Game → Database
yönündeki packet'leri ifade eder.
DG
Database → Game
yönündeki packet'leri ifade eder.
Metin2Dev network dokümantasyonu bu yönleri açıkça bu şekilde tanımlar.
Source içerisinde örneğin:
HEADER_GD_...
ve:
HEADER_DG_...
isimlendirmeleri görebilirsiniz.
Bir sistemi source'a eklerken hem game hem db tarafında değişiklik yapılmasının gerekmesinin nedenlerinden biri de budur.
GG Nedir?
GG ise:
Game → Game
yani game core'lar arasındaki iletişimi ifade eder.
Bu yapı özellikle birden fazla game core olduğunda önem kazanır.
Örneğin farklı core'lardaki oyuncularla ilişkili bazı ortak bilgiler veya core'lar arası bildirimler P2P mekanizması üzerinden aktarılabilir.
Bu yüzden CONFIG içerisinde:
P2P_PORT
gibi bir değer görürsünüz.
P2P_PORT ile PORT Arasındaki Fark Nedir?
Genel mantıkta:
PORT, client/server veya process'in ana dinleme portlarından biriyle;
P2P_PORT, server core'larının birbirleriyle P2P iletişimiyle
ilişkilidir.
Kesin kullanım ve bağlantı yapısı source sürümüne göre kontrol edilmelidir.
Aynı portu yanlışlıkla birden fazla process'e vermek:
-
core'un başlamaması,
-
bind hatası,
-
core'lar arası iletişim problemi,
gibi sorunlar doğurabilir.
DB_ADDR ve DB_PORT Nedir?
Game/auth CONFIG içerisinde sık görülen:
DB_ADDR:
DB_PORT:
ayarları Metin2 db core bağlantısı açısından önemlidir.
Kaynak kodda DB_ADDR ve DB_PORT değerlerinin CONFIG'den okunup db bağlantısı için saklandığı açıkça görülmektedir.
Örneğin temsili:
DB_ADDR: 127.0.0.1
DB_PORT: 15000
olabilir.
Bu sayı sadece örnektir.
Serverinizde kullanılan gerçek portu kendi DB configuration'ınızdan kontrol edin.
DB Core Hangi Ayar Dosyasını Kullanır?
Bu konu server files sürümüne göre değişebilir.
Klasik yapılarda sıklıkla:
db/conf.txt
veya benzer isimde DB configuration dosyaları görülür.
Örneğin yapılandırmada:
BIND_PORT
SQL_ACCOUNT
SQL_COMMON
SQL_PLAYER
gibi seçeneklerle karşılaşılabilir.
Metin2 topluluk örneklerinde DB configuration içerisinde BIND_PORT, SQL_ACCOUNT, SQL_COMMON ve SQL_PLAYER alanlarının kullanıldığı görülmektedir.
Ancak kullandığınız source daha yeni veya özelleştirilmişse dosya adı ve syntax tamamen farklı olabilir.
Server Açılırken Önce Hangisi Başlatılmalı?
Klasik yapılarda pratik başlangıç sırası çoğunlukla:
1. Database servisi
2. DB core
3. Auth core
4. Game core'lar
mantığındadır.
Neden?
Game ve auth process'leri DB hizmetine ihtiyaç duyduğu için önce DB katmanının hazır olması gerekir.
Toplulukta kullanılan klasik startup script örneklerinde de önce db, ardından auth, sonra channel/game process'lerinin başlatıldığı görülmektedir.
Kullandığınız files kendi startup yöneticisine sahipse onun sırasını esas alın.
game99 Nedir?
Game, DB ve Auth yapısını öğrenirken game99 adına da sık rastlanır.
game99, klasik server files düzenlerinde genellikle bazı özel haritaların ayrı game process üzerinde tutulduğu yapı olarak kullanılmıştır.
Topluluk açıklamalarında game99'un:
-
OX,
-
wedding,
-
çeşitli özel instance'lar
gibi haritalar için channel klasörlerinden ayrı tutulabildiği belirtilmektedir.
Ancak:
game99 = sistemde zorunlu özel bir üçüncü binary
değildir.
Yine bir game core instance'ıdır.
Bir Serverde Kaç Game Core Olmalı?
Bunun sabit bir cevabı yoktur.
Şunlara göre belirlenir:
-
Online oyuncu sayısı
-
Harita sayısı
-
Mob yoğunluğu
-
Dungeon sistemleri
-
Event sistemleri
-
CPU performansı
-
Source optimizasyonu
-
Core başına düşen yük
Örneğin:
CH1 Core1
CH1 Core2
CH1 Core3
yapmak otomatik olarak serveri üç kat hızlandırmaz.
Kötü dağıtılmış map yapısı ve ağır source sistemleri varsa core sayısını artırmak tek başına problemi çözmez.
Core ile CPU Core Aynı Şey mi?
Hayır.
Bu ayrım önemlidir.
Metin2 topluluğunda:
CH1 Core1
dendiğinde genellikle game process'i kastedilir.
Sunucunuzdaki:
8 Core CPU
ise fiziksel/lojik işlemci çekirdeği kavramıdır.
Bunlar aynı şey değildir.
Elbette çalışan game process'leri işletim sistemi tarafından CPU kaynaklarını kullanır, ancak isim benzerliği iki kavramı aynı yapmaz.
Core ile Core Dump Aynı Şey mi?
Hayır.
Bir başka sık karıştırılan konu da budur.
Server klasöründe:
game.core
veya işletim sisteminin oluşturduğu:
*.core
benzeri bir crash dump görmeniz mümkündür.
Bu dosya:
çalışan game core
değildir.
Bu genellikle process çöktüğünde debug amacıyla oluşturulan core dump dosyasıdır.
Dolayısıyla iki farklı kullanım vardır:
Core = çalışan server process'i
Core dump = çöken process'in bellek/debug dökümü
Bir crash araştırırken bu ayrımı bilmek önemlidir.
Hangi Sorunda Hangi Core Kontrol Edilmeli?
| Belirti | Öncelikli Kontrol |
|---|---|
| Kullanıcı adı/şifre sonrası giriş olmuyor | Auth |
| Herkes login ekranında kalıyor | Auth + DB |
| Belirli haritadaki oyuncular düştü | İlgili Game Core |
| Bir channel tamamen problemli | Channel game core'ları |
| Karakter/eşya kayıt problemi | DB Core + SQL |
| Rollback yaşanıyor | DB/cache + shutdown süreci |
| Warp sonrası bağlantı kopuyor | Game core / map yönlendirmesi |
| DB bağlantı hatası | DB_ADDR / DB_PORT / DB core |
| SQL bağlantı hatası | SQL servisi ve ilgili config |
| Sadece yeni oyuncular giremiyor | Auth |
| Tüm core'larda veri problemi | DB katmanı öncelikli incelenmeli |
Bu tablo ilk teşhis içindir. Tek bir belirti farklı nedenlerden kaynaklanabilir.
Core Hatasında Hangi Loglar Kontrol Edilmeli?
Metin2 server tarafında en önemli teşhis araçlarından biri loglardır.
Server files yapınıza göre şu dosyalarla karşılaşabilirsiniz:
syserr
syslog
stdout
veya özelleştirilmiş logging altyapıları.
Modernize edilmiş bazı açık source forklarında logging sistemi farklı kütüphanelere taşınmıştır; dolayısıyla kesin log dosya isimleri files sürümüne göre değişebilir.
Auth Problemi
Önce auth process'in loguna bakın.
Aranabilecek türden problemler:
SQL connection
DB connection
socket
authentication
bind
port
Game Core Problemi
İlgili core'un kendi logunu inceleyin.
Örneğin:
channel1/core1/syserr
benzeri yol olabilir.
Gerçek dizin kullandığınız server files'e göre farklıdır.
DB Problemi
DB process loguna bakın.
Özellikle:
-
SQL bağlantısı
-
item cache
-
player cache
-
duplicate ID
-
query hataları
-
peer bağlantıları
gibi mesajlar önemli olabilir.
Core Açılmıyorsa Kontrol Listesi
Bir game/auth/db process'i başlamıyorsa rastgele dosya değiştirmek yerine sırayla kontrol edin.
1. Process gerçekten çalışıyor mu?
İşletim sisteminizde process listesini kontrol edin.
Kullanacağınız komut Linux/FreeBSD yapınıza göre değişebilir.
2. Log'u okuyun
İlk gerçek hata satırını bulun.
Son satır her zaman asıl sebep olmayabilir.
3. Portları kontrol edin
Aynı port başka process tarafından kullanılıyor olabilir.
4. DB bağlantısını kontrol edin
Game/auth:
DB_ADDR
DB_PORT
değerleri doğru mu?
5. SQL servisini kontrol edin
MySQL/MariaDB gerçekten çalışıyor mu?
6. CONFIG syntax'ını kontrol edin
Eksik veya yanlış parametre process'in başlangıç sırasında kapanmasına neden olabilir.
7. Binary uyumluluğunu kontrol edin
Yanlış işletim sistemi, eksik library veya yanlış derleme binary'si de process'in başlamamasına neden olabilir.
DB Core'u Aniden Kapatmak Neden Risklidir?
DB core cache mekanizması nedeniyle bu konu özellikle önemlidir.
Aktif serverde verilerin bir bölümü cache üzerinde bekliyor olabilir.
DB process'in kontrolsüz kapanması:
-
veri kaybı,
-
rollback,
-
item kayıt sorunları,
gibi riskler oluşturabilir.
Metin2 geliştirme topluluğunda DB cache'in crash durumunda kaydedilmemiş player/item bilgilerinin kaybolabileceğine ve kontrollü cache flush süreçlerinin önemli olduğuna dair örnekler bulunmaktadır.
Bu yüzden production server için doğru shutdown prosedürü kullanılmalıdır.
Sık Yapılan Hatalar
Auth'u Ayrı Bir Binary Sanmak
Birçok klasik yapıda auth klasöründeki process yine game binary'sidir.
Neden karıştırılıyor?
Klasör adı auth olduğu için ayrı program olduğu düşünülür.
Doğrusu:
Process'in kullandığı binary'yi ve AUTH_SERVER CONFIG ayarını kontrol edin.
DB Core ile MySQL'i Aynı Şey Sanmak
Bunlar farklı sistemlerdir.
DB core: Metin2 uygulaması.
MySQL/MariaDB: Veritabanı servisi.
İkisini ayrı ayrı kontrol edin.
Channel ile Core'u Aynı Sanmak
Bir channel birden fazla game core içerebilir.
Core'lar harita veya yük dağılımı amacıyla ayrılabilir.
Game Core Sayısını Rastgele Artırmak
Daha çok core her zaman daha yüksek performans anlamına gelmez.
Map dağılımı ve gerçek CPU yükü ölçülmelidir.
Yanlış Port Kullanmak
PORT, P2P_PORT ve DB_PORT değerlerini karıştırmak ciddi bağlantı sorunlarına yol açabilir.
DB Core'u Zorla Öldürmek
Cache flush tamamlanmadan yapılan sert kapanış veri bütünlüğü açısından risk oluşturabilir.
Her Core'a Aynı MAP_ALLOW'u Vermek
Kullanılan mimariye göre aynı haritanın yanlış biçimde birden fazla core'a verilmesi sorun oluşturabilir.
Map dağılımını mevcut files mimarisine göre yapın.
Metin2Docs İpuçları
Process ağacını çizin. Server files öğrenirken klasörlere bakmak yerine bir kağıda şu yapıyı yazın:
DB
AUTH
CH1 CORE1
CH1 CORE2
CH2 CORE1
GAME99
Sonra her process'in:
PORT
P2P_PORT
DB_PORT
MAP_ALLOW
değerlerini yanına ekleyin. Port çakışmalarını çok daha kolay fark edersiniz.
Sorunu daraltın. Bir haritadaki oyuncular düşüyorsa ilk olarak DB source'u değiştirmeyin. O haritayı hangi core'un çalıştırdığını belirleyin ve onun syserr kaydını inceleyin.
DB ile SQL'i ayrı test edin. MySQL bağlantısının çalışması Metin2 db process'inin sağlıklı olduğu anlamına gelmez.
Auth problemi ile game problemini ayırın. Login olamayan oyuncuyla, karakter seçtikten sonra düşen oyuncunun problemi aynı katmanda olmayabilir.
Sık Sorulan Sorular
Metin2 game core nedir?
Game core, Metin2 serverinin oyun dünyasını çalıştıran process'idir. Haritalar, karakterler, moblar, combat, quest ve birçok oyun içi işlem game server kodu tarafından yürütülür.
Metin2 db core nedir?
DB core, db executable'ı üzerinden çalışan Metin2 veritabanı/cache process'idir. Game core'lar ile kalıcı veri katmanı arasında önemli veri aktarımı ve cache görevleri yürütür.
Metin2 auth core nedir?
Auth core oyuncunun giriş ve authentication işlemlerini yürütür. Klasik Metin2 source'larında çoğunlukla aynı game executable'ının AUTH_SERVER ayarıyla authentication modunda çalışan instance'ıdır.
Auth ile game aynı dosya mı?
Birçok klasik server source yapısında evet; aynı game binary'si farklı CONFIG ile normal game veya auth modunda çalışabilir. Özel forklar bunu farklı şekilde tasarlamış olabilir.
DB core ile MySQL aynı mı?
Hayır. DB core Metin2 server uygulamasıdır; MySQL/MariaDB ise veritabanı yönetim sistemidir.
Bir channel kaç core olabilir?
Tek veya birden fazla olabilir. Kesin sayı server files mimarisine ve ihtiyaç duyulan yük dağılımına göre değişir.
Core çökerse bütün server kapanır mı?
Her zaman değil. Tek bir game core çökerse çoğunlukla o process'in yönettiği harita ve oyuncular etkilenir. DB gibi merkezi bir sürecin çökmesi çok daha geniş etkiye sahip olabilir.
GD ve DG packet nedir?
GD, Game → Database; DG, Database → Game yönündeki server packet'lerini ifade eder.
P2P_PORT ne işe yarar?
Game server process'lerinin birbirleriyle P2P iletişim kurduğu bağlantı yapısında kullanılan portlardan biridir. Exact kullanım source sürümüne göre kontrol edilmelidir.
game99 ayrı bir program mı?
Genellikle hayır. Klasik yapılarda özel haritalar için ayrılmış başka bir game process/core olarak kullanılır.

Savaşçı Yorumları
Bu parşömene ilk notu sen bırak.
Deneyimini paylaşarak konu sahibine destek ol ve Metin2 arşivini güçlendir.