on
(आवश्यकता Workerman संस्करण >=3.3.0)
void \Channel\Client::on(string $event_name, callback $callback_function)
$event_name इवेंट की सदस्यता लेने और इवेंट होने पर कॉलबैक $callback_function पंजीकृत करने के लिए।
कॉलबैक फ़ंक्शन के पैरामीटर
$event_name
सदस्यता लेने वाले इवेंट का नाम, यह कोई भी स्ट्रिंग हो सकता है।
$callback_function
इवेंट होने पर सक्रिय होने वाला कॉलबैक फ़ंक्शन। फ़ंक्शन का प्रोटोटाइप callback_function(mixed $event_data) है। $event_data वह इवेंट डेटा है जो इवेंट के दौरान प्रकाशित (publish) किया जाता है।
ध्यान दें:
यदि एक ही इवेंट के लिए दो कॉलबैक फ़ंक्शन पंजीकृत हैं, तो अंतिम कॉलबैक फ़ंक्शन पहले वाले को ओवरराइड कर देगा।
उदाहरण
बहु-प्रक्रिया कार्यकर्ता (कई सर्वर), एक क्लाइंट संदेश भेजता है, सभी क्लाइंट को प्रसारित करता है
start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// एक Channel सर्वर का प्रारंभ करें
$channel_server = new Channel\Server('0.0.0.0', 2206);
// वेब सॉकेट सर्वर
$worker = new Worker('websocket://0.0.0.0:4236');
$worker->name = 'websocket';
$worker->count = 6;
// प्रत्येक कार्यकर्ता प्रक्रिया शुरू होने पर
$worker->onWorkerStart = function($worker)
{
// Channel क्लाइंट Channel सर्वर से कनेक्ट करता है
Channel\Client::connect('127.0.0.1', 2206);
// broadcast इवेंट की सदस्यता लें, और इवेंट कॉलबैक पंजीकृत करें
Channel\Client::on('broadcast', function($event_data)use($worker){
// वर्तमान कार्यकर्ता प्रक्रिया के सभी क्लाइंट को संदेश प्रसारित करें
foreach($worker->connections as $connection)
{
$connection->send($event_data);
}
});
};
$worker->onMessage = function(TcpConnection $connection, $data)
{
// क्लाइंट द्वारा भेजे गए डेटा को इवेंट डेटा के रूप में मानें
$event_data = $data;
// सभी कार्यकर्ता प्रक्रियाओं को broadcast इवेंट प्रकाशित करें
\Channel\Client::publish('broadcast', $event_data);
};
Worker::runAll();
परीक्षण
Chrome ब्राउज़र खोलें, F12 दबाकर डिबग कंसोल खोलें, Console श्रेणी में टाइप करें (या नीचे दिए गए कोड को HTML पृष्ठ में JS के माध्यम से चलाने के लिए रखें)
संदेश प्राप्त करने वाला कनेक्शन
// 127.0.0.1 को वास्तविक Workerman IP से बदलें
ws = new WebSocket("ws://127.0.0.1:4236");
ws.onmessage = function(e) {
alert("सर्वर से संदेश प्राप्त हुआ:" + e.data);
};
संदेश प्रसारित करें
ws.send('hello world');