send
Açıklama:
mixed Connection::send(mixed $data [,$raw = false])
İstemciye veri gönderir
Parametreler
$data
Gönderilecek veri, eğer Worker sınıfı başlatılırken bir protokol belirtilmişse, otomatik olarak protokolün encode yöntemini çağırarak protokol paketleme işlemi tamamlanır ve istemciye gönderilir.
$raw
Ham verinin gönderilip gönderilmeyeceğini belirtir, yani protokolün encode yönteminin çağrılmadığı anlamına gelir, varsayılan değer false'dur, yani otomatik olarak protokolün encode yöntemi çağrılır.
Dönüş Değeri
true, verilerin bu bağlantının işletim sistemi düzeyindeki socket gönderim tamponuna başarıyla yazıldığını gösterir.
null, verilerin bu bağlantının uygulama katmanı gönderim tamponuna yazıldığını ve sistem katmanı socket gönderim tamponuna yazılmayı beklediğini gösterir.
false, gönderimin başarısız olduğunu gösterir; başarısızlık nedeni istemci bağlantısının kapatılmış olması veya bu bağlantının uygulama katmanı gönderim tamponunun dolmuş olması gibi durumlar olabilir.
Dikkat
send, true döndürdüğünde, sadece verinin bu bağlantının işletim sistemi socket gönderim tamponuna başarıyla yazıldığını belirtir, verinin karşı tarafın socket alım tamponuna başarıyla gönderildiği veya karşı tarafın uygulamasının yerel socket alım tamponundan veriyi okuduğu anlamına gelmez. Ancak bu durumlarda, send false dönmediği ve ağ kopması olmadığı sürece ve istemci veriyi düzgün bir şekilde alıyorsa, verinin büyük ihtimalle karşı tarafa ulaşacağı kabul edilebilir.
Socket gönderim tamponundaki veriler işletim sistemi tarafından karşı tarafa asenkron olarak gönderildiği için, işletim sistemi uygulama katmanına uygun bir onay mekanizması sağlamaz, bu nedenle uygulama katmanı socket gönderim tamponundaki verilerin ne zaman gönderilmeye başlandığını bilemez, uygulama katmanı socket gönderim tamponundaki verilerin başarısız bir şekilde gönderilip gönderilmediğini de bilemez. Yukarıdaki nedenlerden dolayı Workerman doğrudan mesaj onay arayüzü sağlayamaz.
Eğer iş gereksinimleri her mesajın istemci tarafından alındığını garanti ediyorsa, iş mantığına bir onay mekanizması eklenebilir. Onay mekanizması işin niteliğine göre farklılık gösterebilir, aynı iş için onay mekanizması da birden fazla yöntemle uygulanabilir.
Örneğin, bir sohbet sistemi bu tür bir onay mekanizması kullanabilir. Her mesajı veritabanına kaydederek, her mesaj için okunup okunmadığına dair bir alan ekleyebilir. İstemci her mesaj aldığında sunucuya bir onay paketi gönderir ve sunucu ilgili mesajı okundu olarak işaretler. İstemci sunucuya bağlandığında (genellikle kullanıcı girişi veya bağlantı kopması sonrası yeniden bağlanma durumunda), veritabanında okunmamış mesaj var mı diye sorgulama yapılır, varsa istemciye gönderilir. İstemci mesajı aldıktan sonra sunucuya okunduğunu bildirir. Bu şekilde her mesajın karşı tarafta alındığından emin olunabilir. Elbette geliştirici kendi onay mantığını da kullanabilir.
Örnek
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
$worker = new Worker('websocket://0.0.0.0:8484');
$worker->onMessage = function(TcpConnection $connection, $data)
{
// Otomatik olarak \Workerman\Protocols\Websocket::encode çağrılarak websocket protokolü verisi olarak paketlenip gönderilecektir
$connection->send("hello\n");
};
// İşçi çalıştır
Worker::runAll();