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 उन्हें एक जगह से मैनेज कर सके और लोकल साइट्स (पहले “होस्ट्स”) को कॉन्फिगर किया जा सके।
प्रीरेक्विज़िट
शुरू करने से पहले यह पक्का कर लें:
- 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आदि एक्सटेंशन सक्रिय हैं। ServBay आम तौर पर इन्हें डिफॉल्ट रूप से एक्टिव करता है, आप ServBay के PHP सेटिंग्स में देख सकते हैं।
- टर्मिनल का एक्सेस: macOS के टर्मिनल ऐप की जानकारी हो।
Webman इंस्टॉल करें
Composer उपलब्ध है या नहीं जांचें
ServBay Composer के साथ आता है और टर्मिनल में डायरेक्ट इस्तेमाल के लिए तैयार है। पुष्टि के लिए टर्मिनल में यह कमांड चलाएं:
bashcomposer --version1अगर Composer का वर्ज़न दिख जाये, तो composer तैयार है।
ServBay वेबसाइट डायरेक्टरी में जाएं
टर्मिनल खोलें और ServBay के वेबसाइट रूट डायरेक्टरी में जाइए:
bashcd /Applications/ServBay/www1Composer के द्वारा Webman प्रोजेक्ट बनाएं
Composer के
create-projectकमांड से Webman को डायरेक्टरी में इंस्टॉल करें। प्रोजेक्ट का नामservbay-webman-appरखें:bashcomposer create-project workerman/webman servbay-webman-app1Composer Webman और इसके कोर डिपेंडेंसी को
servbay-webman-appफोल्डर में डाउनलोड करेगा।प्रोजेक्ट डायरेक्टरी में जाएं
इंस्टॉल के बाद नए प्रोजेक्ट फोल्डर में जाएं:
bashcd servbay-webman-app1जरूरी कंपोनेंट्स इंस्टॉल करें
डाटाबेस और कैश डेमोंस्ट्रेशन के लिए कुछ एक्स्ट्रा Composer पैकेज लगेंगे, जैसे
illuminate/database(Laravel का कम्पोनेंट),illuminate/redisआदि।-W(या--with-dependencies) पैकेज डिपेंडेंसीज और कम्पैटिबिलिटी संभालता है।bashcomposer require -W illuminate/database illuminate/redis illuminate/pagination illuminate/events symfony/var-dumper1यह डाटाबेस ORM, Redis क्लाइंट, पेजिनेशन, इवेंट हैंडलर और डिबगिंग के लिए VarDumper इंस्टॉल कर देगा।
डाटाबेस और टेबल बनाएं
एग्जाम्पल कोड के लिए ServBay के MySQL और PostgreSQL डाटाबेस में webman_app डाटाबेस और users टेबल चाहिए। ServBay का डिफॉल्ट root यूज़र पासवर्ड password है।
ServBay के डाटाबेस मैनेजमेंट टूल (phpMyAdmin या pgAdmin, ServBay कंट्रोल पैनल से पहुंचें) या कमांड लाइन के ज़रिए यह SQL चलाएँ।
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फोल्डर मेंIndexController.php,CacheController.phpऔरDatabaseController.phpबनाएं, तथा नीचे का कोड डालें।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 // स्पष्ट रूप से Response टाइप लौटाएँ { // एक सिंपल टेक्स्ट प्रतिक्रिया लौटाएँ return response('Hello ServBay & Webman!'); // वेलकम मैसेज अपडेट करें } }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 Facade class CacheController { /** * Memcached का प्रदर्शन विधि * @param Request $request * @return Response */ public function memcached(Request $request): Response { // Memcached सर्वर से कनेक्ट करें, ServBay डिफॉल्ट 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('Memcached की key सेट करने में असफल', 500); } // कैश आइटम प्राप्त करें $value = $memcached->get('servbay_key'); // key अपडेट करें // प्राप्त मान लौटाएं return response($value ?: 'Memcached key नहीं मिली या एक्स्पायर हो गई'); // न मिलने पर मैसेज बढ़ाएँ } /** * Redis का प्रदर्शन विधि * @param Request $request * @return Response */ public function redis(Request $request): Response { // Webman के Redis Facade से कैश आइटम सेट करें Redis::set('servbay_redis_key', 'Hello Redis from ServBay!'); // key और value अपडेट करें // Webman के Redis Facade से कैश आइटम प्राप्त करें $value = Redis::get('servbay_redis_key'); // key अपडेट करें // प्राप्त मान लौटाएं return response($value ?: 'Redis key नहीं मिली'); // न मिलने पर मैसेज बढ़ाएँ } }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; // Webman द्वारा उपलब्ध Db Facade class DatabaseController { /** * MySQL डाटाबेस में यूज़र जोड़ें * @param Request $request * @return Response */ public function mysqlAdd(Request $request): Response { try { // Db Facade के माध्यम से 'mysql' कनेक्शन और डेटा इन्सर्ट करें Db::connection('mysql')->table('users')->insert([ 'name' => 'ServBay Webman MySQL User', // डेटा अपडेट करें 'email' => 'mysql_demo@servbay.test', // उदाहरण ईमेल 'created_at' => date('Y-m-d H:i:s') // created_at जोड़ें ]); return response('MySQL में यूज़र जोड़ा गया'); // response अपडेट करें } catch (\Exception $e) { return response('MySQL में यूज़र जोड़ने में त्रुटि: ' . $e->getMessage(), 500); // एरर हैंडलिंग बढ़ाएँ } } /** * MySQL डाटाबेस से यूज़र लिस्ट प्राप्त करें * @param Request $request * @return Response */ public function mysqlGet(Request $request): Response { try { // Db Facade के माध्यम से 'mysql' कनेक्शन और सभी यूज़र प्राप्त करें $users = Db::connection('mysql')->table('users')->get(); // यूज़र लिस्ट JSON फॉर्मेट में लौटाएं return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Content-Type स्पष्ट करें } catch (\Exception $e) { return response('MySQL से यूज़र प्राप्त करने में त्रुटि: ' . $e->getMessage(), 500); // एरर हैंडलिंग बढ़ाएँ } } /** * PostgreSQL डाटाबेस में यूज़र जोड़ें * @param Request $request * @return Response */ public function pgsqlAdd(Request $request): Response { try { // Db Facade द्वारा 'pgsql' कनेक्शन और डेटा इन्सर्ट करें Db::connection('pgsql')->table('users')->insert([ 'name' => 'ServBay Webman PgSQL User', // डेटा अपडेट 'email' => 'pgsql_demo@servbay.test', // उदाहरण ईमेल 'created_at' => date('Y-m-d H:i:s') // created_at जोड़ें ]); return response('PostgreSQL में यूज़र जोड़ा गया'); // प्रतिक्रिया अपडेट } catch (\Exception $e) { return response('PostgreSQL में यूज़र जोड़ने में त्रुटि: ' . $e->getMessage(), 500); // एरर हैंडलिंग बढ़ाएँ } } /** * PostgreSQL डाटाबेस से यूज़र लिस्ट प्राप्त करें * @param Request $request * @return Response */ public function pgsqlGet(Request $request): Response { try { // Db Facade के माध्यम से 'pgsql' कनेक्शन और सभी यूज़र प्राप्त करें $users = Db::connection('pgsql')->table('users')->get(); // यूज़र लिस्ट JSON फॉर्मेट में लौटाएं return response(json_encode($users), 200, ['Content-Type' => 'application/json']); // Content-Type स्पष्ट करें } catch (\Exception $e) { return response('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
82
83
84
डाटाबेस कनेक्शन कॉन्फ़िगर करें
प्रोजेक्ट रूट में
config/database.phpएडिट करें और MySQL, PostgreSQL कनेक्शन जानकारी डालें। ServBay में डाटाबेस होस्ट127.0.0.1है, पोर्ट3306(MySQL) और5432(PostgreSQL), यूज़रroot, पासवर्डpasswordहै।php<?php /** * डाटाबेस कॉन्फ़िगरेशन */ return [ // डिफॉल्ट डाटाबेस कनेक्शन 'default' => 'mysql', // डाटाबेस कनेक्शन लिस्ट 'connections' => [ 'mysql' => [ 'driver' => 'mysql', // ServBay का डिफॉल्ट MySQL होस्ट और पोर्ट 'host' => '127.0.0.1', 'port' => 3306, // बनाया गया डाटाबेस नाम 'database' => 'webman_app', // ServBay का डिफॉल्ट यूज़रनेम 'username' => 'root', // ServBay का डिफॉल्ट पासवर्ड 'password' => 'password', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true, 'engine' => null, ], 'pgsql' => [ 'driver' => 'pgsql', // ServBay का डिफॉल्ट PostgreSQL होस्ट और पोर्ट 'host' => '127.0.0.1', 'port' => 5432, // बनाया गया डाटाबेस नाम 'database' => 'webman_app', // ServBay का डिफॉल्ट यूज़रनेम 'username' => 'root', // ServBay का डिफॉल्ट पासवर्ड '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
39
40
41
42
43
44
45
46महत्वपूर्ण: प्रोडक्शन के लिए डिफॉल्ट पासवर्ड ज़रूर बदलें और कोड में संवेदनशील जानकारी हार्डकोड करने से बचें।
Webman प्रोजेक्ट चलाएँ
Webman प्रोजेक्ट आमतौर पर इसके start.php स्क्रिप्ट से Workerman प्रोसेस को स्टार्ट करते हैं। Nginx/Apache + PHP-FPM की तरह पारंपरिक ढंग से नहीं, बल्कि Webman असिंक मेमोरी रेजिडेंट एप्लिकेशन है।
प्रोजेक्ट रूट (/Applications/ServBay/www/servbay-webman-app) में यह कमांड चलाएँ:
bash
php start.php start1
यह कमांड चलाने पर Webman स्टार्ट की जानकारी मिलेगी, और यह डिफॉल्ट रूप से 127.0.0.1:8787 पर HTTP रिक्वेस्ट्स को सुनेगा।
- नोट: यहाँ
phpकमांड ServBay के PHP एक्जीक्यूटेबल का उपयोग करता है। ServBay टर्मिनल एनवायरनमेंट को अपने PHP वर्शन के अनुसार ऑटोमैटिक सेट कर देती है। - अगर आप Webman को बैकग्राउंड में चलाना चाहें, तो
-dइस्तेमाल करें:php start.php start -d। - Webman सर्विस रोकने के लिए:
php start.php stop। - Webman सर्विस रीस्टार्ट करने के लिए:
php start.php restart। - स्मूद रीस्टार्ट (वर्तमान रिक्वेस्ट्स बाधित न हों):
php start.php reload।
प्रोजेक्ट टेस्ट करें
Webman सफलतापूर्वक स्टार्ट होकर 127.0.0.1:8787 सुनता है, तब ब्राउज़र में इन URL पर जाएँ और कार्यक्षमता देखें:
http://localhost:8787/: यहाँ आपकोHello ServBay & Webman!दिखेगा।http://localhost:8787/memcached: यहाँHello Memcached from ServBay!दिखेगा, यानी आप Webman से ServBay के Memcached सर्वर से जुड़ गए।http://localhost:8787/redis: यहाँHello Redis from ServBay!दिखेगा, यानी Redis सर्वर ठीक से काम कर रहा है।http://localhost:8787/mysql-add: यहाँUser added to MySQLदिखेगा - आपके MySQL डाटाबेस कीusersटेबल में एक रिकॉर्ड जुड़ जाएगी।http://localhost:8787/mysql: यहाँ MySQL डाटाबेस कीusersटेबल का JSON सूची मिलेगा।http://localhost:8787/pgsql-add: यहाँUser added to PostgreSQLदिखाई देगा - PostgreSQL डाटाबेस कीusersटेबल में नया रिकॉर्ड।http://localhost:8787/pgsql: यहाँ PostgreSQL डाटाबेस कीusersटेबल का JSON सूची मिलेगा।
अगर इन URL को खोलने में कोई समस्या आये, तो Webman के टर्मिनल आउटपुट में एरर देखें; साथ ही यह जांचें कि ServBay में MySQL, PostgreSQL, Redis, Memcached पैकेज चल रहे हैं, और संबंधित PHP एक्सटेंशन एक्टिव हैं।
सामान्य प्रश्न (FAQ)
- Q:
php start.php startकमांड नहीं मिल रही?- A: ध्यान दें कि आपने टर्मिनल में
servbay-webman-appप्रोजेक्ट डायरेक्टरी मेंcdकिया है। साथ ही ServBay द्वारा इंस्टॉल किया गया PHP आपके PATH में है, जिसे ServBay ऑटोमैटिक सेट कर देता है।
- A: ध्यान दें कि आपने टर्मिनल में
- Q:
localhost:8787ओपन करने पर कनेक्शन फेल हो रहा है?- A: टर्मिनल में
php start.php startके आउटपुट में एरर देखें। जांचें कि पोर्ट8787किसी अन्य ऐप द्वारा तो यूज़ नहीं हो रहा। जरूरत हो, तो Webman की कॉन्फिगरेशन (जैसेconfig/server.php) में पोर्ट बदलें।
- A: टर्मिनल में
- Q: डाटाबेस कनेक्शन फेल हो रहा है?
- A: जांचें कि ServBay में MySQL और PostgreSQL पैकेज चालू हैं।
config/database.phpमें होस्ट, पोर्ट, डाटाबेस नाम, यूज़र, पासवर्ड ServBay से मेल खाते हैं (डिफॉल्ट:root/password)। साथ हीwebman_appडाटाबेस वusersटेबल बन गई है।
- A: जांचें कि ServBay में MySQL और PostgreSQL पैकेज चालू हैं।
- 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 का बेहतर उपयोग कर उम्दा वेब एप्लिकेशन बनाएंगे।
