ServBay में Swoole के साथ हाई परफॉर्मेंस PHP ऐप्लिकेशन बनाएं
ServBay एक लोकल वेब डेवलपमेंट वातावरण है, जिसे खासतौर पर डिवेलपर्स के लिए डिज़ाइन किया गया है। इसमें पहले से ही कई लैंग्वेज एनवायरनमेंट, डेटाबेस और टूल्स शामिल हैं, जिससे लोकल विकास प्रक्रिया बेहद आसान हो जाती है। इस लेख में हम बताएँगे कि कैसे ServBay वातावरण में Swoole एक्सटेंशन का उपयोग करके PHP एप्लिकेशन को अधिक पावरफुल बनाया जा सकता है और हाई परफॉर्मेंस नेटवर्क सेवाएँ बनाई जा सकती हैं।
Swoole क्या है?
Swoole एक कोरूटीन-आधारित, समानांतर और हाई परफॉर्मेंस नेटवर्क इंजिन है, जिसे खास तौर पर PHP के लिए डिज़ाइन किया गया है। यह सी भाषा में लिखा गया है और PHP को असिंक्रोनस, पैरेलल और कोरूटीन नेटवर्क क्षमताएँ देता है। Swoole के जरिए PHP डिवेलपर्स पारंपरिक वेब सर्वर जैसे Apache/Nginx + PHP-FPM के request-response मॉडल की सीमा से बाहर निकल सकते हैं, और ज्यादा एफिशेंट तरीके से हाई कंकरेंसी टास्क—जैसे इन-मेमोरी वेब सर्वर, असिंक्रोनस टास्क प्रोसेसिंग, रीयल-टाइम कम्युनिकेशन (WebSocket) आदि—को संभाल सकते हैं।
Swoole की मुख्य विशेषताएँ:
- हाई परफॉर्मेंस: C भाषा से बनी लो-लेवल इम्प्लीमेंटेशन, असिंक्रोनस I/O व मल्टी-प्रोसेस/मल्टी-थ्रेड सपोर्ट।
- कोरूटीन: हल्के-फुल्के कोरूटीन, जिनसे सिंक्रोनस कोड को भी असिंक्रोनस की तरह लिखा जा सकता है—असिंक प्रोग्रामिंग आसान हो जाती है।
- मल्टी-प्रोटोकॉल सपोर्ट: TCP/UDP/HTTP/WebSocket समेत कई नेटवर्क प्रोटोकॉल्स के लिए नेटिव सपोर्ट।
- आसान इस्तेमाल: PHP की आदतों के अनुसार सिंपल API।
- इन-मेमोरी प्रोसेस: ऐप्लिकेशन लगातार सर्वर पर चलता रहता है, जिससे हर बार इनिशियलाइजेशन का ओवरहेड नहीं होता।
Swoole के जरिए PHP सिर्फ वेब डेवलपमेंट तक सीमित नहीं, बल्कि हाई परफॉर्मेंस नेटवर्क एप्लिकेशन के हर तरह के सीनारियो के लिए उपयुक्त हो जाता है।
ServBay में Swoole को इनेबल करें
ServBay इस तरह से डिजाइन किया गया है कि डेवलपर्स विभिन्न PHP एक्सटेंशन को सरलता से प्रबंधित और इस्तेमाल कर सकें। Swoole, जो आजकल के PHP हाई परफॉर्मेंस डेवेलपमेंट का एक मेन एक्सटेंशन है, ServBay में प्री-इंस्टॉल्ड मिलता है। इसे इस्तेमाल करने के लिए निम्नलिखित सिंपल स्टेप्स अपनाएँ।
पूर्वशर्तें:
- ServBay इंस्टॉल और रनिंग होना चाहिए।
- ServBay में कम से कम एक PHP वर्शन इंस्टॉल होना चाहिए।
स्टेप्स:
- ServBay एप्लिकेशन इंटरफेस खोलें।
- "Packages" या PHP वर्शन मैनेजमेंट इंटरफेस पर जाएँ। (ध्यान दें: इंटरफेस नाम ServBay के वर्शन के हिसाब से थोड़ा अलग हो सकता है, आमतौर पर मुख्य स्क्रीन या सेटिंग्स में मिलेगा)
- जिस PHP वर्शन के लिए Swoole इनेबल करना है, उसे चुनें।
- Swoole एक्सटेंशन को खोजें और उसे सक्रिय करें। ServBay में एक्सटेंशन्स आमतौर पर लिस्ट या स्विच की शक्ल में दिखते हैं।
- अपने बदलाव सेव करें और यदि पूछा जाए, तो ServBay या संबंधित PHP सेवा को रीस्टार्ट करें। ServBay आपके PHP वातावरण को खुद ही कनफिगर कर देगा ताकि Swoole एक्सटेंशन लोड हो सके।
इन स्टेप्स के बाद, चुने गए PHP वर्शन में Swoole चालू हो जाएगा। आप कमांड लाइन में php -m
चलाकर कन्फर्म कर सकते हैं कि swoole
लोडेड एक्सटेंशनों की लिस्ट में है या नहीं।
TIP
ServBay डिफॉल्ट रूप से सलाह देता है कि आप अपनी वेबसाइट और प्रोजेक्ट फाइलें /Applications/ServBay/www
डायरेक्टरी के अंदर रखें। इससे ServBay का साइट मैनेजमेंट व कॉन्फ़िगरेशन आसान हो जाता है। इस गाइड के उदाहरणों में हम यही रास्ता इस्तेमाल करेंगे।
एक बेसिक Swoole HTTP सर्वर बनाएं
अब हम एक सिंपल Swoole HTTP सर्वर बनाएँगे, जो वेब रिक्वेस्ट्स प्रोसेस कर सके।
स्टेप 1: प्रोजेक्ट डायरेक्टरी बनाना
टर्मिनल खोलें और एक नया प्रोजेक्ट फोल्डर बनाकर उसमें जाएँ। ServBay की सलाह के अनुसार डायरेक्टरी का पथ /Applications/ServBay/www
रखें:
bash
cd /Applications/ServBay/www
mkdir servbay-swoole-http
cd servbay-swoole-http
1
2
3
2
3
स्टेप 2: सर्वर स्क्रिप्ट लिखें
servbay-swoole-http
फोल्डर में server.php
नाम की फाइल बनाएँ और इसमें यह कोड डालें:
php
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
// Swoole HTTP सर्वर इंस्टैंस बनाएं
// सभी नेटवर्क इंटरफेस (0.0.0.0) पर 9501 पोर्ट सुनें
$server = new Server("0.0.0.0", 9501);
// 'start' इवेंट के लिए कॉलबैक पंजीकृत करें
// सर्वर के सफलतापूर्वक शुरू होने पर ट्रिगर होगा
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://0.0.0.0:9501\n";
// यहां आप मुख्य प्रक्रिया ID, मैनेजर प्रक्रिया ID आदि लॉग कर सकते हैं
});
// 'request' इवेंट के लिए कॉलबैक पंजीकृत करें
// जब कोई नया HTTP अनुरोध प्राप्त हो तब ट्रिगर होता है
$server->on("request", function (Request $request, Response $response) {
// उत्तर हेडर सेट करें
$response->header("Content-Type", "text/plain");
// अनुरोध पथ या पैरामीटर के आधार पर लॉजिक लागू करें
$path = $request->server['request_uri'] ?? '/';
$content = "Hello ServBay!";
if ($path === '/info') {
$content = "Request path: " . $path . "\n";
$content .= "Method: " . $request->server['request_method'] . "\n";
$content .= "Client IP: " . $request->server['remote_addr'] . "\n";
// और भी अनुरोध जानकारी $request ऑब्जेक्ट से पाई जा सकती है
}
// उत्तर भेजें और अनुरोध समाप्त करें
$response->end($content);
});
// सर्वर प्रारंभ करें
$server->start();
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
38
39
40
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
38
39
40
यह स्क्रिप्ट Swoole HTTP सर्वर बनाती है, जो पोर्ट 9501 पर सुनता है। रिक्वेस्ट मिलने पर यह "Hello ServBay!"
का टेक्स्ट रिस्पांस भेजता है। अगर /info
पथ से अनुरोध किया जाए, तो अनुरोध जानकारी लौटाएगा।
स्टेप 3: Swoole सर्वर चलाएँ
सुनिश्चित करें कि आपका टर्मिनल servbay-swoole-http
डायरेक्टरी में है। Swoole इनेबल्ड PHP वर्शन के साथ स्क्रिप्ट रन करें:
bash
php server.php
1
अगर सब सही रहा, तो टर्मिनल में यह आउटपुट दिखेगा:
bash
Swoole HTTP server is started at http://0.0.0.0:9501
1
मतलब Swoole HTTP सर्वर 9501 पोर्ट पर सुन रहा है।
स्टेप 4: Swoole सर्वर एक्सेस करें
वेब ब्राउज़र खोलें और नीचे दिए गए एड्रेस खोलें:
http://localhost:9501
http://localhost:9501/info
आपको क्रमशः Hello ServBay!
और अनुरोध जानकारी वाला टेक्स्ट दिखाई देगा।
सर्वर बंद करने के लिए, जहाँ स्क्रिप्ट चल रही हो वहाँ टर्मिनल में Ctrl + C
दबाएँ।
Swoole के साथ WebSocket कनेक्शन संभालें
Swoole वेब-सॉकेट प्रोटोकॉल के लिए नेटिव सपोर्ट देता है—वास्तविक समय चैट, गेम सर्वर, लाइव डाटा पुश आदि के लिए आदर्श।
स्टेप 1: WebSocket सर्वर स्क्रिप्ट बनाएँ
/Applications/ServBay/www/servbay-swoole-http
(या जैसे चाहें, नया फोल्डर बना सकते हैं, जैसे servbay-swoole-websocket
) में websocket_server.php
फाइल बनाएँ और इसमें यह कोड डालें:
php
<?php
use Swoole\WebSocket\Server;
use Swoole\Http\Request;
use Swoole\WebSocket\Frame;
// Swoole WebSocket सर्वर इंस्टैंस बनाएं
// WebSocket सर्वर, HTTP सर्वर से इनहेरिट करता है, इसीलिए HTTP रिक्वेस्ट भी हैंडल कर सकता है
$server = new Server("0.0.0.0", 9502); // 9502 पोर्ट पर सुनें
// 'start' इवेंट पंजीकृत करें: सर्वर स्टार्ट होने पर
$server->on("start", function (Server $server) {
echo "Swoole WebSocket server is started at ws://0.0.0.0:9502\n";
});
// 'open' इवेंट पंजीकृत करें
// नई WebSocket कनेक्शन बनने पर ट्रिगर होता है
// $request में client कनेक्शन जानकारी होती है, जैसे $request->fd क्लाइंट का फ़ाइल डिस्क्रिप्टर
$server->on("open", function (Server $server, Request $request) {
echo "connection open: {$request->fd}\n";
// क्लाइंट को वेलकम मैसेज भेज सकते हैं
$server->push($request->fd, "Welcome to ServBay WebSocket Demo!");
});
// 'message' इवेंट पंजीकृत करें
// सर्वर को क्लाइंट से WebSocket मैसेज मिलने पर ट्रिगर होता है
// $frame में मैसेज जानकारी होती है, जैसे $frame->data मैसेज कंटेंट, $frame->fd भेजने वाले क्लाइंट का fd
$server->on("message", function (Server $server, Frame $frame) {
echo "received message from {$frame->fd}: {$frame->data}\n";
// सभी जुड़े हुए क्लाइंट्स को ब्रॉडकास्ट कर सकते हैं या भेजने वाले क्लाइंट को जवाब दे सकते हैं
// उदाहरण: भेजने वाले को रिप्लाई दें
$server->push($frame->fd, "Hello, you sent: {$frame->data}");
// ब्रॉडकास्ट उदाहरण (कनेक्शन सूची ट्रैक करनी होगी)
// foreach ($server->connections as $fd) {
// if ($fd != $frame->fd) { // खुद भेजने वाले को न भेजें
// $server->push($fd, "User {$frame->fd} says: {$frame->data}");
// }
// }
});
// 'close' इवेंट पंजीकृत करें
// क्लाइंट कनेक्शन बंद होने पर ट्रिगर होता है
$server->on("close", function ($ser, $fd) {
echo "connection close: {$fd}\n";
});
// सर्वर प्रारंभ करें
$server->start();
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
38
39
40
41
42
43
44
45
46
47
48
49
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
38
39
40
41
42
43
44
45
46
47
48
49
यह स्क्रिप्ट एक Swoole WebSocket सर्वर बनाती है, जो पोर्ट 9502 पर सुनता है। इसमें कई जरूरी इवेंट्स के कॉलबैक हैं: start
(सर्वर स्टार्ट), open
(नया कनेक्शन), message
(मैसेज रिसीव), close
(डिस्कनेक्ट)। message
इवेंट पर, सर्वर प्राप्त मैसेज को एक प्रीफिक्स के साथ भेजने वाले क्लाइंट को पुनः भेजता है।
स्टेप 2: WebSocket सर्वर चलाएँ
सुनिश्चित करें कि आप उसी डायरेक्टरी में हैं जहाँ websocket_server.php
रखा है। Swoole इनेबल्ड PHP के साथ स्क्रिप्ट रन करें:
bash
php websocket_server.php
1
सफलता पर टर्मिनल में यह दिखेगा:
bash
Swoole WebSocket server is started at ws://0.0.0.0:9502
1
मतलब Swoole WebSocket सर्वर 9502 पोर्ट पर सुन रहा है।
स्टेप 3: WebSocket सर्वर से जुड़ें
इस सर्वर से कनेक्ट होने के लिए कई तरीके हैं।
विधि A: ब्राउज़र डेवलपर टूल का उपयोग
अधिकांश ब्राउज़र के डेवलपर टूल्स (अक्सर F12 दबा कर) में "Network" या "Console" पैनल होता है, जिससे WebSocket कनेक्शन की जांच हो सकती है।
कोई पेज (जैसे
about:blank
) खोलें।डेवलपर टूल्स खोलकर "Console" पैनल चुनें।
यह जावास्क्रिप्ट कोड डालें:
javascriptvar ws = new WebSocket("ws://localhost:9502"); ws.onopen = function(event) { console.log("WebSocket connection opened:", event); ws.send("Hello from Browser!"); // सफल कनेक्शन के बाद मैसेज भेजें }; ws.onmessage = function(event) { console.log("Message from server:", event.data); // सर्वर से मैसेज रिसीव }; ws.onerror = function(event) { console.error("WebSocket error:", event); // कोई एरर हो तो }; ws.onclose = function(event) { console.log("WebSocket connection closed:", event); // कनेक्शन बंद }; // कभी भी ws.send("आपका मैसेज") से मैसेज भेज सकते हैं // ws.close() से कनेक्शन बंद कर सकते हैं
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Console में यह कोड चलाएँ और आउटपुट देखें। दूसरी ओर, जहां
websocket_server.php
चल रहा है, वहाँ भी लॉग्स आएंगे।
विधि B: wscat
कमांड लाइन टूल से
wscat
एक पॉपुलर CLI WebSocket क्लाइंट टूल है, जो Node.js पर आधारित है।
wscat
इंस्टॉल करें: अगर Node.js और npm इंस्टॉल नहीं हैं, तो पहले इन्हें इंस्टॉल करें। फिर npm सेwscat
इंस्टॉल करें:bashnpm install -g wscat
1WebSocket सर्वर से कनेक्ट करें: टर्मिनल में यह कमांड चलाएँ:
bashwscat -c ws://localhost:9502
1कनेक्शन सफल होने पर
>
दिखाई देगा।मैसेज भेजें:
>
के बाद कोई भी मैसेज लिखकर भेजें, उदाहरण:bash> Hello ServBay via wscat
1सर्वर रिप्लाई में आपको (आमतौर पर
<
से शुरू) मैसेज देगा:bash< Hello, you sent: Hello ServBay via wscat
1साथ ही,
websocket_server.php
वाले टर्मिनल में भी लॉग दिखेगा।
wscat
कनेक्शन बंद करने के लिए Ctrl + C
दबाएँ।
ध्यान रखने योग्य बातें
- पोर्ट क्लैश: यह सुनिश्चित करें कि Swoole सर्वर जिस पोर्ट (जैसे 9501, 9502) पर चल रहा है, वह किसी और प्रोग्राम द्वारा उपयोग में न हो—वरना Swoole सर्वर शुरू नहीं होगा।
- PHP वर्शन: स्क्रिप्ट रन करते समय ServBay के उसी PHP वर्शन का उपयोग करें जिसमें Swoole एक्सटेंशन चालू किया गया है।
php -v
से मौजूदा PHP वर्शन देखें। ServBay आम तौर पर कमांड लाइन से PHP वर्शन बदलने की सुविधा देता है। - एक्सटेंशन स्टेटस: सर्वर स्टार्ट में दिक्कत हो तो ध्यान से जांचें कि आपके PHP वर्शन पर Swoole एक्सटेंशन चालू किया है या नहीं और आवश्यकतानुसार ServBay/PHP सर्विस को रिस्टार्ट कर लिया है।
- इन-मेमोरी प्रोसेस मैनेजमेंट: Swoole सर्वर लगातार मेमोरी में चलते रहते हैं। उत्पादन (प्रोडक्शन) वातावरण में आपको Supervisor, Systemd, pm2 जैसी प्रक्रिया प्रबंधन टूल्स से इनके सर्वरों को सुपरवाइज (क्रैश के बाद रीस्टार्ट) करना चाहिए। लोकल डेवलपमेंट के लिए टर्मिनल में मैनुअल चलाना पर्याप्त है।
निष्कर्ष
ServBay के जरिए आप आसानी से Swoole एक्सटेंशन चालू कर सकते हैं, जिससे लोकल डेवलपमेंट वातावरण में हाई परफॉर्मेंस PHP एप्लिकेशन—चाहे पारंपरिक HTTP सर्विस हो या आधुनिक WebSocket रीयल-टाइम एप्लिकेशन—बना और टेस्ट कर सकते हैं। Swoole की पावर और ServBay की सहूलियत PHP डेवलेपर्स के लिए नई संभावनाएँ खोलती है, जिससे आप और बेहतर व तेज़ ऐप्लिकेशन बना सकते हैं। आज ही ServBay के साथ Swoole का अनुभव लें!