Özelleştirilmiş İşlem
Webman'da workerman
gibi dinleyici veya işlem özelleştirebilirsiniz.
Dikkat
Windows kullanıcılarının özelleştirilmiş işlemleri başlatmak içinphp windows.php
komutunu kullanarak webman'ı başlatmaları gerekmektedir.
Özelleştirilmiş HTTP Servisi
Bazen webman HTTP servisinin çekirdek kodunu değiştirmeniz gerekebilir. Bu durumda özelleştirilmiş işlemler kullanabilirsiniz.
Örneğin, app\Server.php
dosyasını oluşturun.
<?php
namespace app;
use Webman\App;
class Server extends App
{
// Burada Webman\App üzerindeki metodları yeniden yazabilirsiniz.
}
config/process.php
dosyasına aşağıdaki yapılandırmayı ekleyin.
use Workerman\Worker;
return [
// ... Diğer yapılandırmalar burada atlandı...
'my-http' => [
'handler' => app\Server::class,
'listen' => 'http://0.0.0.0:8686',
'count' => 8, // İşlem sayısı
'user' => '',
'group' => '',
'reusePort' => true,
'constructor' => [
'requestClass' => \support\Request::class, // request sınıfı ayarı
'logger' => \support\Log::channel('default'), // günlük örneği
'appPath' => app_path(), // app dizini konumu
'publicPath' => public_path() // public dizini konumu
]
]
];
İpucu
Eğer webman'ın kendi HTTP işlemini kapatmak istiyorsanız,config/server.php
dosyasındalisten=>''
ayarını yapmanız yeterlidir.
Özelleştirilmiş WebSocket Dinleyici Örneği
app/Pusher.php
dosyasını oluşturun.
<?php
namespace app;
use Workerman\Connection\TcpConnection;
class Pusher
{
public function onConnect(TcpConnection $connection)
{
echo "onConnect\n";
}
public function onWebSocketConnect(TcpConnection $connection, $http_buffer)
{
echo "onWebSocketConnect\n";
}
public function onMessage(TcpConnection $connection, $data)
{
$connection->send($data);
}
public function onClose(TcpConnection $connection)
{
echo "onClose\n";
}
}
Dikkat: Tüm onXXX özellikleri public olarak tanımlanmalıdır.
config/process.php
dosyasına aşağıdaki yapılandırmayı ekleyin.
return [
// ... Diğer işlem yapılandırmaları atlandı ...
// websocket_test işlem adı olarak belirlendi
'websocket_test' => [
// Burada işlem sınıfı belirtiliyor, yukarıda tanımlı olan Pusher sınıfı
'handler' => app\Pusher::class,
'listen' => 'websocket://0.0.0.0:8888',
'count' => 1,
],
];
Özelleştirilmiş Dinleyici Olmayan İşlem Örneği
app/TaskTest.php
dosyasını oluşturun.
<?php
namespace app;
use Workerman\Timer;
use support\Db;
class TaskTest
{
public function onWorkerStart()
{
// Her 10 saniyede bir veritabanında yeni kullanıcı kaydı olup olmadığını kontrol et
Timer::add(10, function(){
Db::table('users')->where('regist_timestamp', '>', time()-10)->get();
});
}
}
config/process.php
dosyasına aşağıdaki yapılandırmayı ekleyin.
return [
// ... Diğer işlem yapılandırmaları atlandı ...
'task' => [
'handler' => app\TaskTest::class
],
];
Dikkat: listen atlanırsa hiçbir port dinlenmez, count atlanırsa işlem sayısı varsayılan olarak 1'dir.
Yapılandırma Dosyası Açıklaması
Bir işlemin tam yapılandırma tanımı aşağıdaki gibidir:
return [
// ...
// websocket_test işlem adı olarak belirlenmiştir.
'websocket_test' => [
// Burada işlem sınıfı belirtiliyor
'handler' => app\Pusher::class,
// Dinlenilen protokol ip ve port (isteğe bağlı)
'listen' => 'websocket://0.0.0.0:8888',
// İşlem sayısı (isteğe bağlı, varsayılan 1)
'count' => 2,
// İşlemin çalışma kullanıcı adı (isteğe bağlı, varsayılan olarak mevcut kullanıcı)
'user' => '',
// İşlemin çalışma kullanıcı grubu (isteğe bağlı, varsayılan olarak mevcut grup)
'group' => '',
// Geçerli işlemin yeniden yüklenebilir olup olmadığı (isteğe bağlı, varsayılan true)
'reloadable' => true,
// reusePort açılıp açılmayacağı
'reusePort' => true,
// taşıma (isteğe bağlı, ssl açıldığında ssl olarak ayarlanmalı, varsayılan tcp)
'transport' => 'tcp',
// bağlam (isteğe bağlı, transport ssl ise sertifika yolu belirtilmelidir)
'context' => [],
// İşlem sınıfının konstruktor parametreleri, burada process\Pusher::class sınıfının konstruktor parametreleri (isteğe bağlı)
'constructor' => [],
// Geçerli işlemin etkin olup olmadığı
'enable' => true
],
];
Özet
Webman'ın özelleştirilmiş işlemleri aslında workerman'ın basit bir paketlemesidir. Yapılandırmayı ve iş mantığını ayırır ve workerman'ın onXXX
geri çağırmalarını sınıf yöntemleri aracılığıyla uygular, diğer kullanımlar workerman ile tamamen aynıdır.