Sunucu Kütüphanesi
"Başlangıç dosya ve kontrolcüleri üzerinden tüm kontrolcü ve görünümlere veri gönderilebilir."
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 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.
});
İş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);
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;
}
});
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');
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');
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);
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);