send
الشرح:
mixed Connection::send(mixed $data [,$raw = false])
إرسال البيانات إلى العميل
المعاملات
$data
البيانات التي سيتم إرسالها. إذا تم تحديد بروتوكول عند تهيئة فئة Worker، سيتم استدعاء طريقة الترميز الخاصة بالبروتوكول تلقائيًا لإكمال عملية تعبئة البروتوكول ثم إرسالها إلى العميل
$raw
هل تريد إرسال البيانات الأصلية، أي عدم استدعاء طريقة الترميز الخاصة بالبروتوكول. القيمة الافتراضية هي الكاذبة، وهي عبارة عن استدعاء تلقائي لطريقة الترميز الخاصة بالبروتوكول
قيمة العودة
true تشير إلى أن البيانات تمت كتابتها بنجاح في ذاكرة التخزين المؤقت للإرسال الموجودة في نظام التشغيل لهذا الاتصال
null تشير إلى أن البيانات تمت كتابتها في ذاكرة التخزين المؤقت للإرسال على مستوى التطبيق، وتنتظر ليتم كتابتها في ذاكرة التخزين المؤقت للإرسال على مستوى النظام
false يشير إلى فشل الإرسال، ويمكن أن يكون السبب في ذلك إغلاق اتصال العميل، أو امتلاء ذاكرة التخزين المؤقت للإرسال على مستوى التطبيق لهذا الاتصال
ملاحظات
إذا كانت قيمة العودة من الدالة true
. فإن هذا يعني فقط أن البيانات تمت كتابتها بنجاح في ذاكرة التخزين المؤقت للإرسال الموجودة في نظام التشغيل ولا يعني بالضرورة أن البيانات تمت إرسالها بنجاح إلى ذاكرة التخزين المؤقت للإستقبال الموجودة في الاتصال المقابل على جهاز الإستقبال. بالرغم من ذلك، فإذا كانت قيمة العودة من الدالة غير false
ولم يتم فصل الشبكة، وكان جهاز العميل قادرًا على الاستقبال بشكل طبيعي، فإنه يمكن تقريبًا الاعتماد على أن البيانات ستصل إلى الجهاز الآخر بنسبة 100٪.
نظرًا لأن بيانات ذاكرة التخزين المؤقت للإرسال في الإتصالات الشبكية يتم إرسالها بشكل غير متزامن من قبل نظام التشغيل إلى الجهاز الآخر، ولا يوفر نظام التشغيل آلية تأكيد مناسبة لطبقات التطبيق، لا يمكن لطبقات التطبيق معرفة متى بدأت بيانات ذاكرة التخزين المؤقت للإرسال في الإرسال ولا يمكن لطبقات التطبيق معرفة ما إذا تمت عملية الإرسال بنجاح أم لا. وبناءً على هذا السبب، لا يمكن لـ workerman توفير واجهة مباشرة لتأكيد الرسائل.
إذا كانت العملية بحاجة إلى ضمان وصول كل رسالة إلى العميل، فيمكن إضافة آلية تأكيد في العمل. يمكن أن تختلف آلية التأكيد وفقًا للأعمال المختلفة ويمكن أن يكون هناك أكثر من طريقة لنفس الأعمال.
على سبيل المثال، يمكن استخدام آلية تأكيد مثل هذه في نظام محادثات: يتم تخزين كل رسالة في قاعدة البيانات، ولكل رسالة تعلم إذا تمت قراءتها أم لا. عندما يستقبل العميل كل رسالة، يتم إرسال إشعار إلى الخادم لتحديد أن الرسالة تمت قراءتها. عندما يقوم العميل بتسجيل الدخول مرة أخرى، يتم فحص قاعدة البيانات لتحديد ما إذا كانت هناك رسائل غير مقروءة وإرسالها إلى العميل. وبنفس الطريقة، عندما يستقبل العميل رسالة، يمكن تنبيه الخادم أن الرسالة تمت قراءتها. بذلك يُمكن ضمان وصول كل رسالة إلى العميل. بالطبع، يمكن للمطورين استخدام آليات تأكيد مختلفة وفقًا للمنطق الخاص بهم.
مثال
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)
{
// سيتم استدعاء \Workerman\Protocols\Websocket::encode تلقائيًا لتعبئة البيانات تبعًا لبروتوكول websocket قبل إرسالها
$connection->send("hello\n");
};
// تشغيل الخادم
Worker::runAll();