ServBay में Workerman एप्लिकेशन बनाएं और चलाएं
अवलोकन
यह दस्तावेज़ ServBay उपयोगकर्ताओं को गाइड करता है कि macOS स्थानीय विकास वातावरण में, ServBay द्वारा एकीकृत PHP और Composer का उपयोग करके, कैसे Workerman आधारित हाई-पर्फॉरमेंस असिंक्रोनस नेटवर्क एप्लिकेशन तेज़ी से बनाएँ और चलाएँ। Workerman एक शक्तिशाली PHP लाइब्रेरी है, जो अधिकतम कनकरेंसी नेटवर्क सेवाओं—जैसे वेब सर्वर, रियल-टाइम कम्युनिकेशन सर्वर, गेम सर्वर आदि—की आवश्यकता वाले एप्लिकेशन बनाने के लिए उपयुक्त है। ServBay एक तैयार-से-उपयोग विकास मंच प्रदान करता है, जिससे Workerman वातावरण की कॉन्फ़िगरेशन प्रक्रिया बहुत आसान हो जाती है।
Workerman क्या है?
Workerman संपूर्ण रूप से PHP में लिखा गया एक ओपन-सोर्स, हाई-पर्फॉरमेंस, असिंक्रोनस नेटवर्क कम्युनिकेशन फ्रेमवर्क है। यह EventLoop के आधार पर, असिंक्रोनस नॉन-ब्लॉकिंग I/O को लागू करता है, जिससे हज़ारों कनेक्शनों को कुशलतापूर्वक संभाला जा सकता है। पारंपरिक PHP वेब डेवलपमेंट मॉडल (जैसे Apache/Nginx + PHP-FPM) के विपरीत, Workerman एप्लिकेशन सामान्यतः मेमोरी में निविष्ट (resident) रहते हैं, खास पोर्ट पर सुनते हैं, और नेटवर्क कनेक्शन व डेटा को डायरेक्ट हैंडल करते हैं। इससे प्रत्येक अनुरोध के बाद प्रक्रिया के हटने का ओवरहेड समाप्त होता है और प्रदर्शन व थ्रूपुट में काफी वृद्धि होती है।
Workerman की मदद से, आप आसानी से बना सकते हैं—
- उच्च प्रदर्शन HTTP सर्वर, जो सरल स्थैतिक या डायनामिक अनुरोधों के लिए Apache/Nginx का विकल्प बन सकते हैं।
- रियल-टाइम WebSocket सर्वर, जैसे चैट या लाइव डेटा पुश एप्लिकेशन।
- कस्टम प्रोटोकॉल वाले कोई भी TCP/UDP सर्वर।
- कमांड लाइन टूल, शेड्यूल्ड टास्क, माइक्रोसर्विस आदि।
Workerman की मुख्य खूबियाँ और फायदे
- हाई पर्फॉरमेंस: इवेंट-ड्रिवन व असिंक्रोनस नॉन-ब्लॉकिंग I/O की वजह से, यह विशाल कनकरेंट कनेक्शन संभाल सकता है।
- कई प्रोटोकॉल सपोर्ट: HTTP, WebSocket, TCP, UDP समेत सभी आम नेटवर्क प्रोटोकॉल का बिल्ट-इन सपोर्ट है; डेवेलपर्स कस्टम प्रोटोकॉल भी लागू कर सकते हैं।
- उपयोग में आसान: सिंपल और स्पष्ट API, जिससे असिंक्रोनस नेटवर्क प्रोग्रामिंग में आसानी होती है। PHP डेवेलपर्स फ़टाफ़ट शुरू कर सकते हैं।
- लचीला विस्तार: मल्टी-प्रोसेस मॉडल के साथ, मल्टी-कोर CPU के लिए हॉरिजोन्टल स्केलिंग और लोड बैलेंसिंग संभव। Composer पैकेज और मौजूदा PHP लाइब्रेरी आसानी से जोड़ी जा सकती हैं।
- PHP ईकोसिस्टम के साथ इंटीग्रेशन: यह PHP लाइब्रेरी के रूप में PHP की पूरी इकोसिस्टम के साथ मेल रखता है और Composer का उपयोग निर्भरता प्रबंधन के लिए कर सकता है।
- डेमोन (Daemon) मोड: बैकग्राउंड में डेमन मोड में स्टेबल सर्विस चला सकते हैं—प्रोडक्शन डेप्लॉयमेंट के लिए उपयुक्त।
Workerman PHP डेवेलपर्स के लिए हाई-पर्फॉरमेंस, रीयल-टाइम, हाई-कनकरेंसी नेटवर्क एप्लिकेशन बनाने के नए दरवाज़े खोलता है।
ServBay के साथ Workerman विकास पर्यावरण बनाएं
ServBay वेब डेवेलपर्स के लिए बनाया गया एक लोकल डेवेलपमेंट टूल है, जिसमें PHP, Node.js, Python, Go, Java जैसी कई रेंटायम, और Caddy, Nginx, Apache, MySQL, PostgreSQL, MongoDB, Redis, Memcached जैसे सर्वर सॉफ्टवेयर और डेटाबेस पहले से इंटीग्रट हैं। ServBay की खूबी है इसका "रेडी-टू-यूज़" सेटअप, खासकर इसका इन-बिल्ट Composer वातावरण, जिससे यहां Workerman प्रोजेक्ट सेटअप व रन करना बेहद आसान होता है।
यह गाइड आपको ServBay में तेज़ी से Workerman बेसिक एग्ज़ांपल—एक सिंपल HTTP सरवर, एक WebSocket सर्वर, और एक TCP सर्वर—बनाने और चलाने की प्रक्रिया दिखाएगा।
TIP
मैनेजमेंट और युनिफाइड कन्वेंशन के लिए, ServBay सलाह देता है कि आपके सारे स्थानीय वेबसाइट प्रोजेक्ट फाइलें /Applications/ServBay/www
डायरेक्टरी में रहें। इस दस्तावेज़ के सारे पाथ इसी पर बेस्ड होते हैं।
पूर्व-आवश्यकताएँ
शुरू करने से पहले सुनिश्चित करें:
- ServBay इंस्टॉल और सक्रिय हो: ServBay ऑफिसियल वेबसाइट से ताजा वर्शन डाउनलोड कर इंस्टॉल करें।
- ServBay में PHP सक्षम हो: ServBay कंट्रोल पैनल में सही PHP वर्शन चालू करें। Workerman को PHP 5.4 या उसके ऊपर की ज़रूरत होती है। PHP 7.x या 8.x की सिफारिश है।
- PHP प्रोग्रामिंग और कमांडलाइन का बेसिक ज्ञान: आपको PHP सिंटैक्स और टर्मिनल का बेसिक यूज़ आना चाहिए।
Workerman इंस्टॉल करें
1. Composer उपलब्धता जांचें
ServBay में Composer पहले से इंस्टॉल होता है। बस देख लें कि ServBay चालू है, और सही PHP वर्शन चालू है। ServBay आपके PHP वर्शन के हिसाब से Composer खुद ही कॉन्फ़िगर करता है। आप ServBay के टर्मिनल या सिस्टम PATH में PHP व Composer जुड़ा हुआ होतो बाहरी टर्मिनल से भी Composer चला सकते हैं।
टर्मिनल में यह कमांड चलाकर Composer जांचें:
bash
composer -v
1
अगर Composer ठीक तरह से कन्फ़िगर है, तो इसका वर्शन दिखेगा। अगर नहीं, तो देख लें ServBay और PHP ऑन हैं या नहीं।
2. प्रोजेक्ट डायरेक्टरी बनाएं
ServBay की सिफारिश किए साइट रूट में जाएं, नई डायरेक्टरी बनाएं, और उसमें जाएँ:
bash
cd /Applications/ServBay/www
mkdir servbay-workerman-demo
cd servbay-workerman-demo
1
2
3
2
3
यहां हम servbay-workerman-demo
डायरेक्ट्री Workerman प्रोजेक्ट के लिए बनाते हैं।
3. Composer से Workerman इंस्टॉल करें
प्रोजेक्ट डायरेक्ट्री (/Applications/ServBay/www/servbay-workerman-demo
) में Composer चला लें:
bash
composer require workerman/workerman
1
Composer Workerman व उसकी डिपेंडेंसी डाउनलोड करके प्रोजेक्ट के vendor
डिरेक्ट्री में डाल देगा।
Workerman HTTP सर्वर कोड लिखें
HTTP सर्वर Workerman के सबसे आम इस्तेमाल में आता है—वेब एप या API सर्विस के लिए।
प्रोजेक्ट डायरेक्टरी में http_server.php
(या आपकी पसंद के किसी नाम) की फ़ाइल बनाएं, और नीचे दी PHP कोड जोड़ें:
php
<?php
// Composer के ऑटो-लोडर को शामिल करें ताकि Workerman क्लास मिले
require __DIR__ . '/vendor/autoload.php';
// Workerman के Worker क्लास आदि इस्तेमाल करें
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
use Workerman\Protocols\Http\Response;
// Worker इंस्टैंस बनाएं—जिस प्रोटोकॉल और एड्रेस को सुनना है
// 'http://0.0.0.0:8080' का मतलब है HTTP सर्वर बनाएँ, जो सभी नेटवर्क इंटरफेस (0.0.0.0) के 8080 पोर्ट पर सुने
// 0.0.0.0 का मतलब है लोकल और LAN दोनों से कनेक्शन; 8080 पोर्ट नंबर है।
$http_worker = new Worker('http://0.0.0.0:8080');
// वर्कर प्रोसेस की संख्या तय करें
// यहाँ 4 रखते हैं—CPU कोर के हिसाब से इसे बढ़ा सकते हैं
$http_worker->count = 4;
// जब क्लाइंट का HTTP रिक्वेस्ट मिले तो क्या करना है
// $connection—मौजूदा नेटवर्क कनेक्शन; $request—रिक्वेस्ट की डिटेल (URL, Headers, Body आदि)
$http_worker->onMessage = function(TcpConnection $connection, Request $request) {
// क्लाइंट को साधारण स्ट्रिंग HTTP रिस्पॉन्स के रूप में भेजें
// Workerman का HTTP प्रोटोकॉल हेडर आदि खुद मैनेज कर लेता है
$connection->send(new Response(200, [], 'Hello ServBay Workerman HTTP Server!'));
};
// सारे वर्कर इंस्टैंसेज़ चलाएं
// यह Workerman का मेन लूप होता है—शुरू होते ही पोर्ट पर सुनना शुरू हो जाता है
Worker::runAll();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
कोड समझाएँ:
require __DIR__ . '/vendor/autoload.php';
: Composer ऑटो-लोडर लाओ ताकि Workerman आदि का उपयोग हो सके।use Workerman\...;
: जरूरी क्लास का इंपोर्ट।new Worker('http://0.0.0.0:8080')
: Workerman इंस्टैंस क्रिएट—HTTP प्रोटोकॉल, एड्रेस 0.0.0.0:8080 पर सुनना।$http_worker->count = 4;
: वर्कर प्रोसेस की संख्या (CPU के हिसाब से समायोज्य)।$http_worker->onMessage = ...
: जब नया HTTP रिक्वेस्ट मिले, तब चलने वाला कोड (रिक्वेस्ट और कनेक्शन ऑब्जेक्ट एक्सेस)।Worker::runAll();
: Workerman ईवेंट लूप चालू करें।
Workerman HTTP सर्वर चलाएँ
प्रोजेक्ट डायरेक्ट्री (/Applications/ServBay/www/servbay-workerman-demo
) में टर्मिनल खोलें, यह कमांड चलाएँ:
bash
php http_server.php start
1
रनिंग मोड्स:
- फोरग्राउंड मोड: ऊपर कमांड से सर्वर फोरग्राउंड में चलेगा—लॉग तत्काल दिखेंगे, और
Ctrl+C
से बंद होगा। डेवलपमेंट/डिबगिंग के लिए अच्छा। - डेमन मोड (Daemon): परोडक्शन/लंबे समय के लिए सर्विस बैकग्राउंड में चलानी है, तो
-d
फ्लैग जोड़ें:bashसर्वर बैकग्राउंड में लॉग फाइल में आउटपुट, और सर्विस कंटीन्यू चलती रहेगी।php http_server.php start -d
1
प्रोसेस मैनेजमेंट:
Workerman आपको यूटिलिटी कमांड्स देता है:
- स्टार्ट:
php http_server.php start
(फोरग्राउंड), याphp http_server.php start -d
(बैकग्राउंड) - स्टॉप:
php http_server.php stop
(सभी रिक्वेस्ट पूरे होने पर सलीके से बंद) - रिस्टार्ट:
php http_server.php restart
(पहले बंद फिर चालू) - रिलोड (कोड अपडेशन के लिए):
php http_server.php reload
(सर्वर डाउन किए बिना सॉफ्ट रीस्टार्ट—onWorkerStart
का ध्यान रखें) - स्टेटस देखें:
php http_server.php status
(प्रोसेस स्थिति, मेमोरी यूज़, कनेक्शन आदि)
सर्वर चालू हो जाने पर ब्राउज़र में जाएँ: http://localhost:8080
या http://127.0.0.1:8080
पर। आपको संदेश दिखेगा Hello ServBay Workerman HTTP Server!
।
Workerman से WebSocket सर्वर बनाएँ
WebSocket प्रोटोकॉल क्लाइंट और सर्वर के बीच स्थायी बाईडायरेक्शनल कम्युनिकेशन की सुविधा देता है—चैट, लाइव डेटा, गेम आदि के लिए ज़बरदस्त। Workerman WebSocket को पूरी तरह सपोर्ट करता है।
WebSocket सर्वर कोड बनाएँ
प्रोजेक्ट डायरेक्ट्री में
websocket_server.php
फ़ाइल बनाकर नीचे का कोड डालें:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // WebSocket सर्वर बनाएं जो 8081 पोर्ट सुनता है // 'websocket://0.0.0.0:8081'—Workerman WebSocket प्रोटोकॉल संभालेगा $ws_worker = new Worker('websocket://0.0.0.0:8081'); // 4 प्रोसेस चलाएँ $ws_worker->count = 4; // कनेक्शन बनने पर लॉजिक $ws_worker->onConnect = function(TcpConnection $connection) { echo "New WebSocket connection from " . $connection->getRemoteIp() . "\n"; }; // Client से मेसेज मिलने पर $ws_worker->onMessage = function(TcpConnection $connection, $data) { echo "Received message: " . $data . "\n"; // वही संदेश क्लाइंट को वापिस भेजें $connection->send('ServBay Workerman received: ' . $data); }; // कनेक्शन बंद होने पर $ws_worker->onClose = function(TcpConnection $connection) { echo "WebSocket Connection closed\n"; }; // त्रुटि आने पर (optional) $ws_worker->onError = function(TcpConnection $connection, $code, $msg) { echo "Error: $code - $msg\n"; }; // सारे Worker इंस्टेंस चालू करें Worker::runAll();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38WebSocket सर्वर चलाएँ
प्रोजेक्ट डायरेक्ट्री में सर्वर चलाएं:
bashphp websocket_server.php start
1बैकग्राउंड में चलाने के लिए
-d
ऐड करें। इस सर्वर से कनेक्ट करने के लिए WebSocket क्लाइंट टूल इस्तेमाल करें:ws://localhost:8081
पर।उदाहरण, ब्राउज़र डेव टूल्स के Console में JavaScript से टेस्ट करें:
javascriptvar ws = new WebSocket("ws://localhost:8081"); ws.onopen = function(event) { console.log("WebSocket connection opened"); ws.send("Hello from Browser!"); // संदेश भेजें }; ws.onmessage = function(event) { console.log("Message from server:", event.data); // संदेश पाएं }; ws.onclose = function(event) { if (event.wasClean) { console.log("WebSocket connection closed cleanly, code=" + event.code + " reason=" + event.reason); } else { console.error("WebSocket connection died"); } }; ws.onerror = function(error) { console.error("WebSocket error:", error); }; // कनेक्शन बंद करना (optional) // ws.close();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25सफल कनेक्शन पर टर्मिनल में लॉग आएगा; संदेश भेजने पर टर्मिनल और ब्राउज़र दोनों में रिस्पॉन्स दिखेगा।
Workerman से TCP सर्वर बनाएँ
Workerman किसी भी जेनरिक TCP सर्वर के लिए उपयुक्त है—गेम बैकेंड, IoT, कस्टम कम्युनिकेशन सर्विस आदि के लिए।
TCP सर्वर कोड बनाएँ
प्रोजेक्ट डायरेक्ट्री में
tcp_server.php
फ़ाइल बनाकर यह कोड लिखें:php<?php require __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use Workerman\Connection\TcpConnection; // TCP सर्वर बनाएं जो 8082 पोर्ट सुनता है // 'tcp://0.0.0.0:8082'—टेक्स्ट प्रोटोकॉल (लाइन एंडिंग '\n') डिफॉल्ट $tcp_worker = new Worker('tcp://0.0.0.0:8082'); // 4 प्रोसेस चलाइए $tcp_worker->count = 4; // कनेक्शन बनने पर $tcp_worker->onConnect = function(TcpConnection $connection) { echo "New TCP connection from " . $connection->getRemoteIp() . "\n"; // स्वागत संदेश भेजें $connection->send("Welcome to ServBay Workerman TCP Server!\n"); }; // Client से मेसेज मिलने पर $tcp_worker->onMessage = function(TcpConnection $connection, $data) { echo "Received data: " . $data; // वही डेटा क्लाइंट को वापिस भेजें $connection->send('ServBay Workerman received: ' . $data); }; // कनेक्शन बंद होने पर $tcp_worker->onClose = function(TcpConnection $connection) { echo "TCP Connection closed\n"; }; // सारे Worker चालू करें Worker::runAll();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34TCP सर्वर चलाएँ
प्रोजेक्ट डायरेक्ट्री में यह कमांड चलाएँ:
bashphp tcp_server.php start
1बैकग्राउंड में चलाने के लिए
-d
इस्तेमाल करें। रन होने के बाद TCP क्लाइंट टूल सेlocalhost:8082
पर कनेक्ट करें।macOS या Linux में, दूसरा टर्मिनल खोलकर
telnet
याnc
(netcat) चलाएँ:bash# telnet से कनेक्ट करें telnet localhost 8082 # या nc (netcat) से nc localhost 8082
1
2
3
4
5कनेक्शन के बाद सर्वर से स्वागत संदेश मिलेगा। कुछ भी टाइप करिए (एंटर के साथ), सर्वर वही मेसेज आपको वापिस भेजेगा।
महत्वपूर्ण बातें
- पोर्ट कब्ज़ा: यह देख लें कि 8080, 8081, 8082 पोर्ट macOS या ServBay के बाकी किसी प्रोग्राम द्वारा यूज़ न हो। नहीं तो Workerman शुरू नहीं होगा और एरर देगा।
lsof -i :port
कमांड से पता करें। - फायरवॉल: macOS फायरवॉल कभी-कभी एक्सटर्नल डिवाइस से कनेक्शन रोक सकता है। अगर लोकल डेवलपमेंट तक सीमित है, तो ज़्यादातर कोई मसला नहीं; पर यदि LAN में दूसरों को सर्विस देना है, तो फायरवॉल सेटिंग चेक करें।
- ServBay Web सर्वर से संबंध: Workerman अपना पोर्ट खुद सुनता है, ServBay के Caddy या Nginx से स्वतंत्र है। आमतौर पर Workerman डायरेक्ट क्लाइंट से कनेक्शन लेता है, न कि Caddy/Nginx के पीछे। Workerman लंबा कनेक्शन, हाई-कनकरेंसी, रीयल-टाइम के लिए बेस्ट है (जैसे WebSocket), जबकि ServBay के Caddy/Nginx पारंपरिक शॉर्ट HTTP अनुरोधों के लिए।
- PHP वर्शन: Workerman के लिए कम-से-कम PHP वर्शन ज़रूरी है। ServBay में कई PHP वर्शन प्री-इंस्टॉल हैं—आप कंट्रोल पैनल से चुन सकते हैं।
- एक्सटेंशन डिपेंडेंसी: Workerman कुछ PHP एक्सटेंशन लेता है—
event
(परफॉरमेंस के लिए बेस्ट),posix
,pcntl
(मल्टी-प्रोसेस के लिए)। ServBay ज़्यादातर एक्सटेंशन पहले ही ऑन कर देता है, फिर भी दिक्कत हो तो कंट्रोल पैनल में चेक करें। - लॉग: डेमन मोड में Workerman की आउटपुट लॉग फाइल में जाती है—अपनी एप्लिकेशन अवस्था व एरर के लिए लॉग समय-समय पर देखें।
अक्सर पूछे जाने वाले सवाल (FAQ)
- Q: Workerman सर्वर कैसे बंद करें?
- A: फोरग्राउंड में चल रहा है तो
Ctrl+C
दबाएँ। बैकग्राउंड/डेमन मोड में (start -d
), प्रोजेक्ट डायरेक्ट्री मेंphp your_server_file.php stop
चलाएँ।
- A: फोरग्राउंड में चल रहा है तो
- Q: Workerman सर्वर स्टार्ट क्यों नहीं हो रहा?
- A: आमतौर पर पोर्ट पहले से यूज़ हो रहा है। टर्मिनल में एरर देखें, पोर्ट को बदलें या कब्जा किए प्रोग्राम को बंद करें।
lsof -i :पोर्ट
से पता चलेगा।
- A: आमतौर पर पोर्ट पहले से यूज़ हो रहा है। टर्मिनल में एरर देखें, पोर्ट को बदलें या कब्जा किए प्रोग्राम को बंद करें।
- Q: ServBay का Caddy/Nginx और Workerman में फ़र्क? कब कौन इस्तेमाल करें?
- A: Caddy/Nginx पारंपरिक HTTP/HTTPS के लिए, PHP-FPM के साथ, हर रिक्वेस्ट के बाद प्रोसेस खत्म हो जाते हैं। Workerman असिंक्रोनस नेटवर्क फ्रेमवर्क है, अपना HTTP/WebSocket/TCP सर्वर सीधे पेश करता है, प्रोसेस मेमोरी में रहते हैं, हाई-कनकरेंसी, लॉन्ग कनेक्शन के लिए। वैसे वेबसाइट/RESTful API लिए Caddy/Nginx, चैट, गेम बैकेंड, IoT लिए Workerman इस्तेमाल करें। चाहें तो Caddy/Nginx को रिवर्स प्रॉक्सी की तरह Workerman तक भेजने के लिए दोनों साथ काम कर सकते हैं।
- Q: ServBay में क्या मैं कई Workerman एप्लिकेशन एक साथ चला सकता हूँ?
- A: बिलकुल। हर Workerman एप्लिकेशन के लिए अलग PHP प्रोसेस और अलग पोर्ट चाहिए। हर एप्लिकेशन का स्टार्टअप स्क्रिप्ट अलग हो और अलग टर्मिनल/बैकग्राउंड में चलाएँ—बस पोर्ट टकराएं नहीं!
निष्कर्ष
इस गाइड के जरिए, आपने जाना कि ServBay जैसे कुशल लोकल डेवेलपमेंट एनवायरनमेंट में Workerman प्रोजेक्ट कैसे जल्दी सेटअप व रन करें। Workerman के हाई-परफॉर्मेंस असिंक्रोनस नेचर से PHP डेवेलपर्स अगली पीढ़ी के नेटवर्क एप्लिकेशन बना सकते हैं। ServBay के रेडी-टू-यूज़ Composer व PHP वातावरण में आप विकास पर फोकस कर सकते हैं, वातावरण कॉन्फ़िगरेशन में समय नष्ट किए बिना। हाई-परफॉर्मेंस वेब सेवाओं से लेकर रीयल-टाइम WebSocket तक, ServBay—Workerman के साथ—आपका उत्तम लोकल डेवेलपमेंट सहयोगी है। उम्मीद है, यह लेख आपके Workerman सफर को आसान बनाएगा!