send

বর্ণনা:

mixed Connection::send(mixed $data [,$raw = false])

ক্লায়েন্টকে ডেটা পাঠান

প্যারামিটার

$data

পাঠানোর ডেটা, যদি Worker ক্লাসের প্রাথমিককরণের সময় প্রোটোকল নির্দিষ্ট করা হয়, তবে স্বয়ংক্রিয়ভাবে প্রোটোকলের encode পদ্ধতি কল করা হবে, প্রোটোকল প্যাকেজিংয়ের কাজ সম্পন্ন করার পর ক্লায়েন্টকে পাঠানো হবে

$raw

কাঁচা ডেটা পাঠানোর কি না, অর্থাৎ প্রোটোকলের encode পদ্ধতি কল না করা, ডিফল্ট হল false, অর্থাৎ স্বয়ংক্রিয়ভাবে প্রোটোকলের encode পদ্ধতি কল করা হবে

প্রত্যাবর্তন মান

true নির্দেশ করে ডেটা সফলভাবে এই সংযোগের অপারেটিং সিস্টেম স্তরের socket প্রেরণ বাফারে লেখা হয়েছে

null নির্দেশ করে ডেটা এই সংযোগের অ্যাপ্লিকেশন স্তরের প্রেরণ বাফারে লেখা হয়েছে, সিস্টেম স্তরের socket প্রেরণ বাফারে লেখার জন্য অপেক্ষা করছে

false নির্দেশ করে প্রেরণ ব্যর্থ হয়েছে, ব্যর্থতার কারণ হতে পারে ক্লায়েন্টের সংযোগ ইতিমধ্যেই বন্ধ হয়েছে, অথবা এই সংযোগের অ্যাপ্লিকেশন স্তরের প্রেরণ বাফার পূর্ণ

লক্ষ্য

send প্রাপ্ত true শুধুমাত্র নির্দেশ করে ডেটা সফলভাবে এই সংযোগের অপারেটিং সিস্টেম socket প্রেরণ বাফারে লেখা হয়েছে, এর অর্থ এই নয় যে ডেটা সফলভাবে বিপরীত socket গ্রহণ বাফারে পাঠানো হয়েছে, আরও মনে রাখবেন যে বিপরীত অ্যাপ্লিকেশনটি স্থানীয় socket গ্রহণ বাফার থেকে ডেটা পড়ে নিয়েছে।তবুও, যতক্ষণ send false ফিরিয়ে আসছে না এবং নেটওয়ার্ক বিচ্ছিন্ন হচ্ছে না, এবং ক্লায়েন্ট স্বাভাবিকভাবে গ্রহণ করছে, ডেটা মোটামুটি 100% নিশ্চিত যে বিপরীত পক্ষের কাছে পৌঁছাবে।

যেহেতু socket প্রেরণ বাফারের ডেটা অপারেটিং সিস্টেম দ্বারা বিপরীত দিকে অসংক্রিয়ভাবে প্রেরিত হয়, অপারেটিং সিস্টেম অ্যাপ্লিকেশন স্তরের জন্য সংশ্লিষ্ট নিশ্চিতকরণ মেকানিজম প্রদান করে না, তাই অ্যাপ্লিকেশন স্তর জানাতে পারে না socket প্রেরণ বাফারের ডেটা কখন প্রেরণ শুরু হবে, অ্যাপ্লিকেশন স্তর আরও জানতে পারে না socket প্রেরণ বাফারের ডেটাগুলি সফলভাবে পাঠানো হয়েছে কিনা। উপরের কারণে 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();