onBufferFull

বিবরণ:

callback Worker::$onBufferFull

প্রতিটি সংযোগের একটি আলাদা অ্যাপ্লিকেশন স্তরের পাঠানো বাফার আছে, যদি ক্লায়েন্টের গ্রহণের গতি সার্ভারের পাঠানোর গতির চেয়ে কম হয়, তথ্য অ্যাপ্লিকেশন স্তরের বাফারে অস্থায়ীভাবে সঞ্চিত হয়, যদি বাফার পূর্ণ হয় তবে onBufferFull কলব্যাক ট্রিগার হবে।

বাফারের আকার হলTcpConnection::$maxSendBufferSize, ডিফল্ট মান 1MB, বর্তমান সংযোগের জন্য বাফারের আকার গতিশীলভাবে সেট করা যেতে পারে উদাহরণস্বরূপ:

// বর্তমান সংযোগের পাঠানো বাফার সেট করুন, একক বাইট
$connection->maxSendBufferSize = 102400;

এছাড়াTcpConnection::$defaultMaxSendBufferSize ব্যবহার করে সকল সংযোগের জন্য ডিফল্ট বাফারের আকার সেট করা যেতে পারে, যেমন কোড:

use Workerman\Connection\TcpConnection;
// সকল সংযোগের জন্য ডিফল্ট অ্যাপ্লিকেশন স্তরের পাঠানো বাফারের আকার সেট করুন, একক বাইট
TcpConnection::$defaultMaxSendBufferSize = 2*1024*1024;

এই কলব্যাকসম্ভব যে Connection::send কল করার পরপরই ট্রিগার হবে, যেমন বৃহৎ তথ্য পাঠানো অথবা পরপর দ্রুতগতিতে অপরপ্রান্তে তথ্য পাঠানো, নেটওয়ার্কের মতো কারণে তথ্য সামঞ্জস্যপূর্ণ সংযোগের পাঠানো বাফারে অনেক বেশি জমা হলে, যখন TcpConnection::$maxSendBufferSize সীমা অতিক্রম করে তখন এটি ট্রিগার হয়।

onBufferFull ইভেন্ট ঘটলে, ডেভেলপার সাধারণত ব্যবস্থা গ্রহণ করতে হবে, যেমন অপরপ্রান্তে তথ্য পাঠানো বন্ধ করা, পাঠানো বাফারে তথ্যগুলি সম্পূর্ণভাবে পাঠানো শেষ হওয়ার জন্য অপেক্ষা করা (onBufferDrain ইভেন্ট) ইত্যাদি।

যখন Connection::send($A) কল করার ফলে onBufferFull ট্রিগার হয়, তখন যে পাঠানো তথ্য $A এর আকার যাই হোক না কেন, এমনকি যদি এটি TcpConnection::$maxSendBufferSize এর চেয়ে বড় হয়, তবুও এইবার পাঠানোর তথ্যটি পাঠানো বাফারে রাখা হবে। অর্থাৎ পাঠানো বাফারে স্থাপন করা তথ্য আসলে TcpConnection::$maxSendBufferSize এর চেয়ে অনেক বেশি হতে পারে, যখন পাঠানো বাফারের তথ্য ইতিমধ্যে TcpConnection::$maxSendBufferSize এর চেয়ে বেশি হয়, তবে যদি Connection::send($B) তথ্য পাঠানো হয়, তবে এইবারের পাঠানো $B তথ্য পাঠানো বাফারে রাখা হবে না, বরং তা বাদ দেওয়া হবে, এবং onError কলব্যাক ট্রিগার হবে।

সংক্ষেপে বলা যায়, যতক্ষণ না পাঠানো বাফার পূর্ণ হয়, যদি একটি বাইটও স্থান অবশিষ্ট থাকে, Connection::send($A) অবশ্যই $Aকে পাঠানো বাফারে রাখবে, যদি পাঠানো বাফারে রাখার পরে, পাঠানো বাফারের আকার TcpConnection::$maxSendBufferSize সীমা অতিক্রম করে, তাহলে onBufferFull কলব্যাক ট্রিগার হবে।

কলব্যাক ফাংশনের প্যারামিটার

$connection

সংযোগ অবজেক্ট, অর্থাৎTcpConnection উদাহরণ, ক্লায়েন্ট সংযোগ পরিচালনার জন্য, যেমন তথ্য পাঠানো, সংযোগ বন্ধ করা ইত্যাদি

উদাহরণ

use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$worker = new Worker('websocket://0.0.0.0:8484');
$worker->onBufferFull = function(TcpConnection $connection)
{
    echo "bufferFull and do not send again\n";
};
// ওয়ার্কার চালান
Worker::runAll();

সূচনা: অজ্ঞাত ফাংশনকে কলব্যাক হিসাবে ব্যবহারের পাশাপাশি, এখানে রেফারেন্স করুন অন্য কলব্যাক লেখার জন্য।

দেখা হবে

onBufferDrain যখন সংযোগের অ্যাপ্লিকেশন স্তরের পাঠানো বাফারের তথ্য সম্পূর্ণরূপে পাঠানো হয় তখন ট্রিগার হয়।