Sunucu Kütüphanesi


    × Bunları biliyor muydunuz?
"Konsoldan 'php zerocore create-grand-vision' gibi basit bir komutla tüm veritabanı ve tablolarının model dosyasını oluşturabilirsiniz."


Soketler aynı veya farklı makineler arasında veri iletişimi sağlamak için kullanılan bir haberleşme yoludur. Bu işlem bir makineden diğerine veri yazma ve o makineden veri okuma üzerine kuruludur. Böylece gelen istekler basit bir dosya okuma veya yazma isteği gibi gönderilip alınabilmektedir. ZN Framework'te PHP'de bulunan soket fonksiyonlarını ele alarak daha basit şekilde farklı bağlantı türleri arasında standartizasyon sağlarayak kullanım kolaylığı sağlamıştır.

 

 

# Kurulum


ZN dağıtımları içinde dahili gelmemektedir. Ayrıca kurulmalıdır.

↓ composer require znframework/package-socket

 

 

# Desteklenen Türler


TCP
UDP
TLS
SSL

 

 

# Yöntemler


object run(string $type, string $host, int $port, mixed $exparam = NULL)
string read(int $length = 1024)
int write(string $content)
void live(callable $callback)
void wait(int $seconds)

 

 

# Run


Soket sunucu bağlantısını çalıştırmak için kullanılır.

Parametreler

string $type Desteklenen türlerden herhangi biri. Kullanılabilir Seçenekler: tcp, udp, tls, ssl
string $host IP adresi veya bağlantı kurulacak host bilgisi.
int $port Bağlantı kurulacak port.
mixed $exparam Bağlantı türüne göre kullanımı farklılık gösterir. TCP & UDP string $protocolFamily = 'v4' Soket tarafından kullanılacak protokol ailesi.
Seçenekler v4, v6, unix
TLS & SSL
float $timeout = NULL
Zaman aşımı süresi.
return object

Aşağıda bağlantı türüne göre kullanımı gösterilmiştir. 

TCP & UDP

TCP ve UDP kullaımları benzerdir.

TCP için Opsiyonel Yöntemler

 

Self backlog(int $count)

Kullanımlar

$socket = ZN\Socket\Server::run('tcp', '127.0.0.1', 8080);

$socket->live(function($socket)
{
    switch( $socket->read() )
    {
        case 'exit' : $socket->write('Goodbye!');           return;
        case 'write': $socket->write('Run write command.'); break;
        case 'read' : $socket->write('Run read command.');  break;

        default     : return;
    }

    $socket->wait(2); # Waiting 2 seconds.
});

Backlog

İşlem için kuyruğa alınacak azami gelen bağlantı sayısı. Dolmuş bir kuyruğa gelen bir bağlantı ya ECONNREFUSED belirten bir hata alır ya da ilgili protokol yeniden bağlanmayı destekliyorsa yineleme başarılı olacağından istek yok sayılır. Bu parametreye atanacak değer çalışılan platforma büyük oranda bağımlıdır. Linux üzerinde kendiliğinden SOMAXCONN'a düşürülür. Win32 üzerinde SOMAXCONN atanırsa makul bir azami değer kullanımından ilgili hizmet sağlayıcı sorumludur. Windows üzerinde bu değer için standart bir yaklaşım yoktur. Server::run() yönteminden önce kullanılır.

$socket = ZN\Socket\Server::backlog(2)::run('tcp', '127.0.0.1', 8080);
TLS & SSL

SSL ve TLS kullanımları benzerdir.

Opsiyonel Yöntemler

this crypto(string $method = NULL)
this blocking(bool $mode = true)
this timeout(float $timeout)
Self option(string $key, mixed $value)

Kullanımlar

SSL veya TLS bağlantısı için ek ayarlara ihtiyaç duyulması halinde doğru bağlantı için option() yöntemini kullanabilirsiniz.

$socket = ZN\Socket\Server::run('tls''127.0.0.1', 8080); 

$socket->live(function($socket)
{
    switch( $socket->read() )
    {
        case 'exit' : $socket->write('Goodbye!');           return;
        case 'write': $socket->write('Run write command.'); break;
        case 'read' : $socket->write('Run read command.');  break;

        default     : return;
    }
});

Crypto

Bağlı bir soket üzerinde şifrelemeyi açıp kapatır. Bu yöntem $socket örneği ile beraber kullanılır.

Kullanılabilir Seçenekler sslv2, sslv3, sslv23, any, tls, tlsv1.0, tlsv1.1, tlsv1.2, NULL
$socket = ZN\Socket\Server::run('tls''127.0.0.1', 8080); 

$socket->crypto('tls');

Blocking

Akımın engelleme kipini ayarlar. Bu yöntem $socket örneği beraber kullanılır.

$socket = ZN\Socket\Server::run('tls''127.0.0.1', 8080);

$socket->blocking('tls');

Timeout

Akımın saniye cinsinden zaman aşımı süresini ayarlar.

$socket = ZN\Socket\Server::run('tls''127.0.0.1', 8080); 

$socket->timeout(5);

Option

SSL ve TLS bağlantı seneçeklerini yapılandırmak için kullanılır. Bu yöntem diğerlerinin aksine Server::run() yönteminin devreye sokulmasından önce çalıştırılmalıdır.

Kullanılabilir Seçenekler
string ca Uzak bilgisayarın kimliğini doğrulamak için verify_peer bağlam seçeneği ile kullanmak üzere yerel dosya sistemindeki sertifika dosyasının yeri.
string pk Yerel sertifikanın dosya sistemindeki yeri. Sertifikanızı ve özel anahtarınızı içeren PEM kodlamalı bir dosya olmalıdır. Seçimlik olarak sertifika sağlayıcıların sertifika zincirini içerebilir. Ayrıca, özel anahtar local_pk ile belirtilen bir dosyayı da içerebilir.
string capath cafile belirtilmemişse veya sertifika yerinde yoksa uygun sertifikayı bulmak için capath tarafından işaret edilen dizin araştırılır. capath doğru olarak betimlenmiş sertifika dizini olmalıdır.
string pk Dosya sisteminde sertifika (local_cert) ve özel anahtar için ayrı dosyalar olması durumunda yerel özel anahtar dosyasının yolu.
string peerName Kullanılan görevdeşin ismi.Bu değer yoksa akım açılırken kullanılan konağın ismine dayalı olarak tahmin edilir.
bool verifyPeer SSL sertifikası kullanımının doğrulanmasını gerektirir.
bool verifyPeerName Görevdeş isminin doğrulanması gerekir.
bool capturePeerCert TRUE belirtilirse peer_certificate bağlam seçeneği görevdeşin sertifikasını içererek oluşturulur.
bool capturePeerCertChain TRUE belirtilirse peer_certificate_chain bağlam seçeneği sertifika zincirini içererek oluşturulur.
String | Array
peerFingerprint Uzak sertifika özeti belirtilenle eşleşmezse çıkar. Değer string türünde belirtilmişse, uzunluk katıştırma algoritmasından belirlenir ("md5" için 32, "sha1" için 40 gibi).
int verifyDepth Sertifika zinciri çok derinse çıkılır. Doğrulama yapılmaması öntanımlıdır.
string ciphers Kullanılabilir şifrelerin listesi belirtilir. Dizge biçemi » ciphers(1) kılavuz sayfasında açıklanmıştır. DEFAULT öntanımlıdır.
bool allowSelfSigned Öz imzalı sertifikalara izin verilir. verify_peer gerekir. Değer array türünde belirtilmişse, anahtarlar katıştırma algoritmasının ismini, değerler umulan özeti içerir.
string passphrase local_cert dosyanızı kodlayan anahtar parolası.
bool sniEnable TRUE atanırsa sunucu ismi belirteci (SNI) etkin olur. Böylece aynı IP adresinde çok sayıda sertifika mümkün olur.
string sniServerName Atanan değer sunucu ismi belirteci için sunucu ismi olarak kullanılır. Bir değer atanmazsa, sunucu ismi akım açılırken kullanılan konak ismine dayanarak tahmin edilir.
bool disableCompression TRUE atanırsa TLS sıkıştırması yapılmaz. Bu, CRIME (SUÇ) saldırı vektörünü azaltmaya yardımcı olabililir.
string commonNameMatch Beklenen bilinen isim (Common Name). PHP sınırlı bir dosya kalıbı eşletirmesi yapmaya çalışır. Eğer bu bilinen isim bununla eşleşmiyorsa bağlantı gerçekleşmeyecektir.
$socket = ZN\Socket\Server::option('verifyPeer', false)::run('tls''127.0.0.1', 8080); 

Birden fazla seçenek yapılandırması gereken durumlarda option() yöntemini zincirleme kullanabilirsiniz.

$socket = ZN\Socket\Server::option('verifyPeer', false)
                          ::option('verifyPeerName', false)
                          ::run('tls''127.0.0.1', 8080);