ServBay में Webman प्रोजेक्ट बनाएँ और रन करें
Webman क्या है?
Webman एक हाई परफॉर्मेंस PHP असिन्क्रोनस वेब फ्रेमवर्क है, जो Workerman पर आधारित है। यह खासतौर पर हाई-कॉन्करंसी और हाई-पर्फॉर्मेंस वेब ऐप्लीकेशन बनाने के लिए डिज़ाइन किया गया है। पारंपरिक सिंक्रोनस ब्लॉकिंग फ्रेमवर्क के उलट, Webman ईवेंट-ड्रिवन और असिन्क नॉन-ब्लॉकिंग I/O मॉडल इस्तेमाल करता है, जिससे यह भारी मात्रा में साथ-साथ आ रही रिक्वेस्ट को शानदार तरीके से संभालता है। Webman का API सरलीकृत और इस्तेमाल में आसान है, और इसमें एक्सटेंशन की भी पूरी सुविधा है — इसलिए यह रीयल-टाइम एप्लिकेशन, API सेवाओं, माइक्रोसर्विसेज आदि के लिए उपयुक्त है।
Webman की मुख्य खूबियां और फायदे
- हाई परफॉर्मेंस: Workerman के आधार पर, असिन्क नॉन-ब्लॉकिंग I/O के साथ लाखों कॉन्करेंट कनेक्शन को संभाल सकता है, पारंपरिक सिंक्रोनस फ्रेमवर्क से कई गुना तेज़।
- इस्तेमाल में आसान: क्लीन और समझने में आसान API और फीचर्स, जिससे डेवलपर्स जल्दी शुरू कर सकते हैं।
- मल्टी-प्रोटोकॉल सपोर्ट: HTTP, WebSocket आदि सहित कई आम एप्लिकेशन लेवल प्रोटोकॉल का इनबिल्ट सपोर्ट।
- लचीलापन: Composer पैकेज, प्लगइन व मिडलवेयर के ज़रिए आसानी से एक्सटेंडेबल।
- कम रिसोर्स यूसेज: पारंपरिक वेब सर्वर + PHP-FPM मॉडल से कम मेमोरी उपयोग, क्योंकि Webman मेमोरी में हमेशा चलता रहता है।
- सशक्त समुदाय: एक्टिव डेवेलपर कम्युनिटी तथा भरपूर डॉक्यूमेंटेशन।
Webman की ये ताकतें डेवलपर्स को हाई परफॉर्मेंस और हाई-अवेलेबल वेब एप्लिकेशन व API सर्विसेज बहुत फुर्ती से बनाने में मदद करती हैं — खासकर जब बहुत सारी साथ-साथ रिक्वेस्ट और कम लेटेंसी की जरूरत हो।
ServBay में एक सिंपल Webman प्रोजेक्ट बनाएं और चलाएं
यह गाइड दिखाएगी कि ServBay लोकल डेवेलपमेंट वातावरण में Webman की मदद से साधारण वेब प्रोजेक्ट कैसे बनाया और चलाया जाए। इसमें Webman इंस्टॉल करना, बेसिक रूट्स व कंट्रोलर कोड बनाना, व ServBay के डाटाबेस (MySQL, PostgreSQL) और कैशिंग सर्विसेस (Redis, Memcached) को इंटीग्रेट करना शामिल है।
TIP
ServBay सलाह देता है कि सभी लोकल वेबसाइट प्रोजेक्ट /Applications/ServBay/www
डायरेक्टरी में रखें, ताकि सर्वबे प्रोजेक्ट्स का कॉमन प्रबंधन कर सके — जैसे कि लोकल साइट्स/होस्ट्स का कंफिगरेशन।
आवश्यक शर्तें
शुरू करने से पहले, यह सुनिश्चित करें:
- ServBay इंस्टॉल करें: आपने macOS पर ServBay सफलतापूर्वक इंस्टॉल कर लिया है। ServBay एक पूरी तरह से रेडी-टू-यूज लोकल डेवेलपमेंट एनवायरनमेंट है जिसमें PHP, Composer, MySQL, PostgreSQL, Redis, Memcached वगैरह सभी आवश्यक पैकेज शामिल हैं।
- आवश्यक पैकेज सक्रिय करें: ServBay कंट्रोल पैनल के ज़रिए ये पैकेज इंस्टॉल और रनिंग स्टेटस में होने चाहिए:
- आपकी पसंद का PHP वर्शन (PHP 8.x अनुशंसित)
- Composer (ServBay के साथ आता है)
- MySQL
- PostgreSQL
- Redis
- Memcached
- यह भी पक्का करें कि आपके चुने PHP वर्शन में
memcached
,redis
,pdo_mysql
,pdo_pgsql
आदि ज़रूरी PHP एक्सटेंशन सक्षम हैं। ये आमतौर पर डिफ़ॉल्ट रूप से ऑन होते हैं; PHP settings में चेक कर सकते हैं।
- टर्मिनल एक्सेस: macOS टर्मिनल ऐप को चलाना आता है।
Webman इंस्टॉलेशन
Composer की उपलब्धता जांचें
ServBay में Composer पहले से इंस्टॉल होता है, और टर्मिनल में सीधा प्रयोग के लिए उपलब्ध होता है। इस कमांड से वेरिफाई करें:
bashcomposer --version
1अगर Composer वर्शन शो हो, तो Composer यूज के लिए तैयार है।
ServBay वेबसाइट डायरेक्टरी में जाएं
टर्मिनल में नीचे दिया गया कमांड चलाएं:
bashcd /Applications/ServBay/www
1Composer से Webman प्रोजेक्ट बनाएं
Composer का
create-project
कमांड चलाएं और Webman को चुने फोल्डर में इंस्टॉल करें। हम प्रोजेक्ट का नामservbay-webman-app
रखेंगे:bashcomposer create-project workerman/webman servbay-webman-app
1Composer Webman और आवश्यक डिपेंडेंसी पैकेज
servbay-webman-app
में इंस्टॉल कर देगा।प्रोजेक्ट डायरेक्टरी में जाएं
इंस्टॉलेशन पूरा होने के बाद:
bashcd servbay-webman-app
1ज़रूरी कंपोनेंट्स इंस्टॉल करें
डाटाबेस व कैशिंग फंक्शन डेमो के लिए कुछ अतिरिक्त Composer पैकेज चाहिए होते हैं। Webman आमतौर पर
illuminate/database
(Laravel का डाटाबेस कंपोनेंट),illuminate/redis
आदि यूज करता है।-W
(या--with-dependencies
) पैरामीटर डिपेंडेंसी इशू सुलझाने के लिए जोड़ा जाता है।bashcomposer require -W illuminate/database illuminate/redis illuminate/pagination illuminate/events symfony/var-dumper
1इससे ORM, Redis क्लाइंट, पेजिनेशन, इवेंट और VarDumper सब इंस्टॉल हो जाएंगे।
डाटाबेस और टेबल बनाएं
डेमो कोड को रन कराने के लिए, ServBay के MySQL और PostgreSQL में एक webman_app
डाटाबेस और उसमें users
टेबल बनायें। डिफ़ॉल्ट रूप से root यूजर का पासवर्ड password
है।
ServBay का phpMyAdmin, pgAdmin (कंट्रोल पैनल में) या कमांड लाइन इस काम के लिए यूज करें।
डाटाबेस
webman_app
बनाएं- MySQL:sql
CREATE DATABASE IF NOT EXISTS webman_app CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
1 - PostgreSQL:sql
CREATE DATABASE webman_app;
1
- MySQL:
webman_app
मेंusers
टेबल बनाएं- MySQL:sql
USE webman_app; CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1
2
3
4
5
6
7 - PostgreSQL:sql
\c webman_app; -- नई डाटाबेस से कनेक्ट करें CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
1
2
3
4
5
6
7
- MySQL:
वेब प्रोजेक्ट कोडिंग
अब हम रूट डिफाइन करेंगे, कंट्रोलर फाइल बनाएंगे, और डाटाबेस तथा कैश से इंटरएक्शन का लॉजिक लिखेंगे।
रूटिंग सेटअप
प्रोजेक्ट की रूट डायरेक्टरी में
config/route.php
खोलकर, नीचे दिया गया कोड जोड़ें:php<?php use Webman\Route; use app\controller\IndexController; use app\controller\CacheController; use app\controller\DatabaseController; // रूट (मुख्य पेज) को IndexController के index मेथड से जोड़ें Route::any('/', [IndexController::class, 'index']); // कैशिंग के लिए रूट्स Route::any('/memcached', [CacheController::class, 'memcached']); Route::any('/redis', [CacheController::class, 'redis']); // डाटाबेस के लिए रूट्स Route::any('/mysql-add', [DatabaseController::class, 'mysqlAdd']); Route::any('/mysql', [DatabaseController::class, 'mysqlGet']); Route::any('/pgsql-add', [DatabaseController::class, 'pgsqlAdd']); Route::any('/pgsql', [DatabaseController::class, 'pgsqlGet']); // और रूट्स ऐड कर सकते हैं...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21कंट्रोलर फाइलें बनाएं
app/controller
फोल्डर में ये फाइलें बनाकर कोड जोड़ें:app/controller/IndexController.php
: मुख्य पेज हैंडल करेगा।php<?php namespace app\controller; use support\Request; use support\Response; // Response क्लास इनपोर्ट करें class IndexController { /** * मुख्य पेज रिक्वेस्ट को प्रोसेस करे * @param Request $request अभी की रिक्वेस्ट * @return Response Response ऑब्जेक्ट */ public function index(Request $request): Response // Return टाइप स्पष्ट { // सिंपल टेक्स्ट रिस्पॉन्स रिटर्न करें return response('Hello ServBay & Webman!'); // Welcome मैसेज } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20app/controller/CacheController.php
: Memcached और Redis डेमो के लिए।php<?php namespace app\controller; use support\Request; use support\Response; use Memcached; // Memcached क्लास इनपोर्ट करें use support\Redis; // Webman Redis Façade class CacheController { /** * Memcached डेमो * @param Request $request * @return Response */ public function memcached(Request $request): Response { // Memcached सर्वर (डिफ़ॉल्ट: 127.0.0.1:11211) $memcached = new Memcached(); $memcached->addServer('127.0.0.1', 11211); // 60 सेकंड वैधिता के साथ वैल्यू सेट करें $success = $memcached->set('servbay_key', 'Hello Memcached from ServBay!', 60); // Key/Value अपडेट if (!$success) { return response('Failed to set Memcached key', 500); } // वैल्यू प्राप्त करें $value = $memcached->get('servbay_key'); // रिस्पॉन्स return response($value ?: 'Memcached key not found or expired'); // अगर ना मिले तो मैसेज दिखाएं } /** * Redis डेमो * @param Request $request * @return Response */ public function redis(Request $request): Response { // Redis Façade से वैल्यू सेट करें Redis::set('servbay_redis_key', 'Hello Redis from ServBay!'); // Redis से वैल्यू पढ़ें $value = Redis::get('servbay_redis_key'); // रिस्पॉन्स return response($value ?: 'Redis key not found'); } }
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
50
51
52app/controller/DatabaseController.php
: MySQL व PostgreSQL डाटाबेस ऑपरेशन के लिए।php<?php namespace app\controller; use support\Request; use support\Response; use support\Db; // Db Façade class DatabaseController { /** * MySQL में यूजर ऐड करें * @param Request $request * @return Response */ public function mysqlAdd(Request $request): Response { try { // 'mysql' कनेक्शन से डाटा ऐड करें Db::connection('mysql')->table('users')->insert([ 'name' => 'ServBay Webman MySQL User', // डेमो डेटा 'email' => '[email protected]', // डेमो ईमेल 'created_at' => date('Y-m-d H:i:s') ]); return response('User added to MySQL'); } catch (\Exception $e) { return response('Error adding user to MySQL: ' . $e->getMessage(), 500); // एरर हैंडलिंग } } /** * MySQL से यूजर लिस्ट पढ़ें * @param Request $request * @return Response */ public function mysqlGet(Request $request): Response { try { // 'mysql' कनेक्शन से सभी यूजर पढ़ें $users = Db::connection('mysql')->table('users')->get(); return response(json_encode($users), 200, ['Content-Type' => 'application/json']); } catch (\Exception $e) { return response('Error getting users from MySQL: ' . $e->getMessage(), 500); } } /** * PostgreSQL में यूजर ऐड करें * @param Request $request * @return Response */ public function pgsqlAdd(Request $request): Response { try { // 'pgsql' कनेक्शन से डाटा ऐड करें Db::connection('pgsql')->table('users')->insert([ 'name' => 'ServBay Webman PgSQL User', 'email' => '[email protected]', 'created_at' => date('Y-m-d H:i:s') ]); return response('User added to PostgreSQL'); } catch (\Exception $e) { return response('Error adding user to PostgreSQL: ' . $e->getMessage(), 500); } } /** * PostgreSQL से यूजर लिस्ट पढ़ें * @param Request $request * @return Response */ public function pgsqlGet(Request $request): Response { try { $users = Db::connection('pgsql')->table('users')->get(); return response(json_encode($users), 200, ['Content-Type' => 'application/json']); } catch (\Exception $e) { return response('Error getting users from PostgreSQL: ' . $e->getMessage(), 500); } } }
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
डाटाबेस कनेक्शन कॉन्फ़िगर करें
प्रोजेक्ट के रूट में
config/database.php
खोलकर MySQL व PostgreSQL कनेक्शन निम्नानुसार सेट करें। (डिफ़ॉल्ट सर्वर: 127.0.0.1, पोर्ट: MySQL: 3306, PostgreSQL: 5432, यूज़र: root, पासवर्ड: password)php<?php /** * डाटाबेस सेटिंग्स */ return [ // डिफॉल्ट कनेक्शन 'default' => 'mysql', // सभी कनेक्शन की डिटेल्स 'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => '127.0.0.1', 'port' => 3306, 'database' => 'webman_app', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', 'host' => '127.0.0.1', 'port' => 5432, 'database' => 'webman_app', 'username' => 'root', 'password' => 'password', 'charset' => 'utf8', 'prefix' => '', 'schema' => 'public', 'sslmode' => 'prefer', // require, verify-ca, verify-full भी इस्तेमाल कर सकते हैं ], // ज्यादा कनेक्शन यहां जोड़ें... ], ];
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महत्वपूर्ण नोट: प्रोडक्शन में डिफ़ॉल्ट पासवर्ड ज़रूर बदलें और संवेदनशील डेटा हार्डकोड न करें।
Webman प्रोजेक्ट को रन करें
Webman प्रोजेक्ट आमतौर पर अपने डिफ़ॉल्ट start.php
स्क्रिप्ट के ज़रिए Workerman प्रोसेस शुरू करता है — यह एफपीएम/NGINX से अलग है, Webman मेमोरी में चलते रहने वाला असिंक्रोनस एप है।
प्रोजेक्ट की डायरेक्टरी (/Applications/ServBay/www/servbay-webman-app
) में ये कमांड चलाएं:
bash
php start.php start
1
अब Webman 127.0.0.1:8787
पर HTTP के लिए लिसन करेगा।
- नोट:
php
कमांड ServBay के PHP इंवायरनमेंट वाले बाइनरी को यूज करती है। ServBay टर्मिनल पाथ अपने-आप सेट कर देता है। - बैकग्राउंड में रन करने के लिए
-d
जोड़ें:php start.php start -d
- Webman रोकने के लिए:
php start.php stop
- Webman फिर से शुरू करने के लिए:
php start.php restart
- स्मूथ रीस्टार्ट के लिए:
php start.php reload
प्रोजेक्ट का परीक्षण
Webman सही तरह लिसन कर रहा हो तो, इन URLs के ज़रिए अलग-अलग फीचर ट्राय करें:
http://localhost:8787/
— "Hello ServBay & Webman!" टेक्स्ट दिखेगा।http://localhost:8787/memcached
— "Hello Memcached from ServBay!" मतलब Memcached ठीक हो गया।http://localhost:8787/redis
— "Hello Redis from ServBay!" मतलब Redis कनेक्शन सही।http://localhost:8787/mysql-add
— "User added to MySQL", इससे MySQL में यूजर एड होगा।http://localhost:8787/mysql
— JSON में यूजर लिस्ट दिखेगी (MySQL)।http://localhost:8787/pgsql-add
— "User added to PostgreSQL", PostgreSQL में यूजर ऐड।http://localhost:8787/pgsql
— JSON में यूजर लिस्ट (PostgreSQL)।
अगर कोई प्रॉब्लम आए तो Webman टर्मिनल आउटपुट चेक करें, ServBay की MySQL/PostgreSQL/Redis/Memcached रनिंग और सभी PHP एक्सटेंशन सक्षम हैं या नहीं, ये भी जांचें।
अक्सर पूछे जाने वाले सवाल (FAQ)
- Q: अगर
php start.php start
नहीं चलता?- A: जांचें कि आप
servbay-webman-app
डायरेक्टरी में हैं। ServBay का PHP सही सेट है या नहीं, यह भी पक्का करें (आमतौर पर ServBay अपने आप हैंडल कर देता है)।
- A: जांचें कि आप
- Q:
localhost:8787
ओपन नहीं हो रहा?- A: टर्मिनल पर
php start.php start
आउटपुट में एरर है या नहीं देखें। पोर्ट 8787 फ्री है? अगर कोई और प्रोग्राम पोर्ट का उपयोग कर रहा हो तोconfig/server.php
में पोर्ट बदल सकते हैं।
- A: टर्मिनल पर
- Q: Database कनेक्ट नहीं हो रहा?
- A: ServBay में MySQL/PGSQL चालू हैं?
config/database.php
में होस्ट, पोर्ट, डेटाबेस, यूजर, पासवर्ड आदि सही सेट हैं? क्याwebman_app
डाटाबेस औरusers
टेबल बने हैं?
- A: ServBay में MySQL/PGSQL चालू हैं?
- Q: Memcached/Redis कनेक्शन फेल हो रहा है?
- A: ServBay में Memcached व Redis रनिंग हैं?
app/controller/CacheController.php
में एड्रेस-पोर्ट सही हैं (127.0.0.1:11211
व127.0.0.1:6379
डिफ़ॉल्ट)। PHP का memcached/redis एक्सटेंशन सक्षम है?
- A: ServBay में Memcached व Redis रनिंग हैं?
निष्कर्ष
ऊपर दिए गए स्टेप्स से आपने ServBay के लोकल डेवेलपमेंट वातावरण में सफलतापूर्वक एक बेसिक Webman प्रोजेक्ट बना, कंफिगर और रन कर लिया है। आपने सीखा कि ServBay की आसानी से Webman के लिए डेवेलपमेंट वातावरण खड़ा कैसे करें, और इसमें डाटाबेस व कैशिंग फंक्शनलिटी कैसे जोड़ें। Webman की हाई परफॉर्मेंस क्षमता व ServBay की सहूलियत आपके असिन्क PHP डेवेलपमेंट को नई ऊंचाइयों तक ले जाएगी। आशा है यह गाइड आपको ServBay और Webman से शानदार वेब एप्लिकेशन बनाने में मदद करेगी।