Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Redis

Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना

Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना <पी> जब आप बड़े पैमाने पर वेब एप्लिकेशन बना रहे हों, तो गति एक प्रमुख प्राथमिकता है। उपयोगकर्ता अब प्रतिक्रियाओं के लिए लंबे समय तक इंतजार नहीं करना चाहते हैं, और उन्हें ऐसा करना भी नहीं चाहिए। लेकिन कुछ प्रक्रियाओं में समय लगता है, और उन्हें और तेज़ नहीं किया जा सकता या ख़त्म नहीं किया जा सकता।

<पी> संदेश कतारें सामान्य अनुरोध-प्रतिक्रिया यात्रा के लिए एक अतिरिक्त शाखा प्रदान करके इस समस्या को हल करने में मदद करती हैं। यह अतिरिक्त शाखा यह सुनिश्चित करने में मदद करती है कि उपयोगकर्ताओं को तत्काल प्रतिक्रिया मिल सकती है, और समय लेने वाली प्रक्रियाओं को किनारे पर किया जा सकता है। हर कोई खुश होकर घर जाता है।

<पी> यह आलेख यह समझाने पर केंद्रित होगा कि संदेश कतारें क्या हैं और एक बहुत ही सरल एप्लिकेशन बनाकर उनके साथ कैसे शुरुआत की जाए। आपको Node.js की बुनियादी बातों से परिचित होना चाहिए, और आपके पास Redis स्थानीय रूप से या क्लाउड इंस्टेंस पर स्थापित होना चाहिए। यहां जानें कि रेडिस कैसे इंस्टॉल करें।

कतार क्या है?

<पी> कतार एक डेटा संरचना है जो आपको इकाइयों को एक क्रम में संग्रहीत करने की अनुमति देती है। कतारें पहले-आओ-पहले-बाहर (फीफो) सिद्धांत का उपयोग करती हैं। <पी> कंप्यूटर विज्ञान में कतारों की अवधारणा रोजमर्रा की जिंदगी में कतारों की अवधारणा के समान है जहां लोग चीजें प्राप्त करने के लिए कतार में लगते हैं। आप पीछे से कतार में शामिल होते हैं, अपनी बारी आने तक प्रतीक्षा करते हैं, फिर आपकी देखभाल होने के बाद सामने से कतार छोड़ देते हैं।

<पी> कंप्यूटर विज्ञान में, जब एपीआई अनुरोध जैसी कोई प्रक्रिया चल रही होती है, और आपको वर्तमान प्रवाह से एक निश्चित कार्य (जैसे ईमेल भेजना) को हटाने की आवश्यकता होती है, तो आप इसे एक कतार में धकेल देते हैं और प्रक्रिया जारी रखते हैं।

<पी> नीचे दिया गया चित्र कतार के जीवनचक्र को दर्शाता है:

<पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना कतार जीवनचक्र | https://optimalbits.github.io/bull/

नौकरी क्या है?

<पी> जॉब डेटा का कोई भी टुकड़ा है जिसका उपयोग कतार में किया जाता है, आमतौर पर JSON जैसी वस्तु।

<पी> जैसा कि इस लेख की कवर छवि में दर्शाया गया है, आप हवाई अड्डे पर कतार में खड़े प्रत्येक व्यक्ति के लिए एक नौकरी के बारे में सोच सकते हैं। प्रत्येक व्यक्ति के पास एक ब्रीफकेस होता है जिसमें विशिष्ट डेटा और अन्य निर्देश होते हैं (पासपोर्ट और शायद जहां आवश्यक हो मेडिकल कागजात) जो उनकी बारी आने पर मदद करेंगे।

<पी> इस कतार में शामिल होने वाले नए लोग पीछे से (अंतिम व्यक्ति के रूप में) प्रवेश करेंगे, और आगे से लोगों की देखभाल की जाएगी। इसी प्रकार नौकरियों को भी संसाधित किया जाता है, प्रत्येक नौकरी में डेटा होता है जिसका उपयोग उसके प्रसंस्करण के लिए किया जाएगा। नई नौकरियाँ पीछे से जोड़ी जाती हैं जबकि नौकरियाँ आगे से हटा दी जाती हैं।

जॉब प्रोड्यूसर क्या है?

<पी> जॉब प्रोड्यूसर कोड का कोई टुकड़ा होता है जो किसी जॉब को कतार में जोड़ता है। वास्तविक जीवन में, यह हवाई अड्डे पर सुरक्षा गार्ड होगा जो लोगों को दिशा देता है, उन्हें बताता है कि विभिन्न उद्देश्यों के लिए किस कतार में शामिल होना है। <पी> एक नौकरी उत्पादक, नौकरी उपभोक्ता से स्वतंत्र रूप से अस्तित्व में रह सकता है। इसका मतलब यह है कि माइक्रोसर्विस सेटअप में, एक विशेष सेवा केवल कतार में नौकरियां जोड़ने से संबंधित हो सकती है, लेकिन इसके बाद उन्हें कैसे संसाधित किया जाता है, इससे संबंधित नहीं हो सकता है।

कर्मचारी (नौकरी उपभोक्ता) क्या है?

<पी> एक कार्यकर्ता, या नौकरी उपभोक्ता, एक प्रक्रिया, या कार्य है, जो किसी कार्य को निष्पादित कर सकता है। एक कर्मचारी को एक बैंक कैशियर के रूप में सोचें जो बैंक की कतार में खड़े लोगों की देखभाल कर रहा हो। जब पहला व्यक्ति अंदर आता है, तो वे कतार में अकेले व्यक्ति के रूप में शामिल हो जाते हैं। फिर कैशियर उन्हें बुलाता है और कतार खाली हो जाती है। <पी> कैशियर व्यक्ति से लेनदेन को संसाधित करने के लिए उपयोग किए जाने वाले विशिष्ट विवरण का अनुरोध करता है। जब तक कैशियर उस ग्राहक की देखभाल करता है, चार और ग्राहक लाइन में खड़े हो सकते थे। वे तब तक कतार में बने रहेंगे जब तक कि कैशियर अगले ग्राहक को बुलाने से पहले पहले ग्राहक के साथ काम पूरा नहीं कर लेता। कतार श्रमिकों के साथ भी यही प्रक्रिया है - वे कतार में पहला काम चुनते हैं, और उसे संसाधित करते हैं।

असफल नौकरियाँ क्या हैं?

<पी> अक्सर, प्रसंस्करण के दौरान कुछ कार्य विफल हो सकते हैं।

<पी> यहां कुछ कारण बताए गए हैं कि क्यों कोई नौकरी असफल हो सकती है:

  • अमान्य या अनुपलब्ध इनपुट डेटा:जब किसी कार्य को संसाधित करने के लिए आवश्यक डेटा अनुपलब्ध है, तो कार्य विफल हो जाएगा। उदाहरण के लिए, ईमेल भेजने का कार्य प्राप्तकर्ता के ईमेल पते के बिना विफल हो जाएगा।
  • टाइमआउट:यदि कोई कार्य सामान्य से अधिक समय ले रहा है तो कतार तंत्र द्वारा विफल हो सकता है। यह नौकरी की निर्भरता या किसी अन्य मुद्दे के कारण हो सकता है, लेकिन आम तौर पर आप नहीं चाहते कि एक भी नौकरी हमेशा के लिए चलती रहे।
  • नेटवर्क या बुनियादी ढांचे की समस्याएं:ये समस्याएं लगभग आपके नियंत्रण से बाहर हैं, लेकिन ये होती हैं। उदाहरण के लिए, डेटाबेस कनेक्शन त्रुटि से कोई कार्य विफल हो जाएगा।
  • निर्भरता के मुद्दे:कभी-कभी कोई नौकरी अच्छी तरह से काम करने के लिए कुछ बाहरी संसाधनों पर निर्भर होती है। जब भी ये अन्य संसाधन अनुपलब्ध या असफल होंगे, तो कार्य विफल हो जाएगा।
<पी> जब नौकरियां विफल हो जाती हैं, तो आप उन्हें पुनः प्रयास करने के लिए अपने कतार तंत्र को कॉन्फ़िगर कर सकते हैं। आप या तो तुरंत कार्य का पुनः प्रयास कर सकते हैं, या निर्धारित समय के बाद। आप प्रयासों की अधिकतम संख्या निर्धारित कर सकते हैं, जो अनुशंसित है। यदि नहीं, तो आप एक ऐसी नौकरी कर रहे हैं जो हमेशा विफल रहेगी।

<पी> माइक्रोसर्विसेज के बीच मजबूत संचार चैनल बनाने के लिए कतारें उपयोगी हैं। एकाधिक सेवाएँ एक ही कतार का उपयोग कर सकती हैं। अलग-अलग सेवाओं को अलग-अलग समस्याएं सौंपी जा सकती हैं। जब कोई सेवा अपना कार्य पूरा कर लेती है, तो वह उस कार्य को किसी अन्य सेवा में भेज सकती है जिसके कर्मचारी उस कार्य की प्रतीक्षा कर रहे हैं। वह सेवा इसे उठाएगी और डेटा के साथ जो भी आवश्यक होगा वह करेगी।

<पी> किसी प्रक्रिया से भारी कार्यों को हटाने के लिए कतारें भी उपयोगी होती हैं। जैसा कि आप इस लेख में देखेंगे, प्रतिक्रिया समय को धीमा होने से बचाने के लिए ईमेल भेजने जैसे समय लेने वाले कार्य को कतार में रखा जा सकता है।

<पी> कतारें विफलता के एकल बिंदुओं से बचने में मदद करती हैं। एक प्रक्रिया जिसमें विफल होने की क्षमता होती है और जिसे पुनः प्रयास किया जा सकता है, उसे एक कतार का उपयोग करके संसाधित करना सबसे अच्छा होता है जहां इसे कुछ समय बाद पुनः प्रयास किया जा सकता है।

क्यूज़ का उपयोग करने वाला एक सरल एप्लिकेशन कैसे बनाएं

<पी> इस लेख में, हम Node.js और Redis का उपयोग करके एक सरल प्रोजेक्ट बनाएंगे। हम बुल लाइब्रेरी का उपयोग करेंगे क्योंकि यह कतार प्रणाली के निर्माण में शामिल कई जटिलताओं को सरल बनाता है। प्रोजेक्ट में ईमेल भेजने के लिए एक एकल समापन बिंदु होगा।

एक नया Node.js प्रोजेक्ट बनाएं

mkdir nodejs-queue-project
cd nodejs-queue-project
npm init -y
<पी> उपरोक्त आदेश nodejs-queue-project नामक एक नया फ़ोल्डर बनाएंगे और एक package.json इसमें फ़ाइल करें. package.json फ़ाइल इस तरह दिखनी चाहिए:

{
 "name": "nodejs-queue-project",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "keywords": [],
 "author": "",
 "license": "ISC"
}

आवश्यक निर्भरताएँ स्थापित करें

npm i express @types/express @types/node body-parser ts-node ts-lint typescript nodemon nodemailer @types/nodemailer
<पी> उपरोक्त आदेश परियोजना के लिए आवश्यक विभिन्न पैकेज और निर्भरताएँ स्थापित करेंगे। <पी> इंस्टालेशन के बाद, आप scripts को अपडेट कर सकते हैं आपके package.json का अनुभाग dev होना चाहिए आदेश. आपका संपूर्ण package.json फ़ाइल अब इस तरह दिखनी चाहिए:

{
 "name": "nodejs-queue-project",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "dev": "nodemon src/app.ts"
 },
 "keywords": [],
 "author": "",
 "license": "ISC",
 "dependencies": {
 "@types/express": "^4.17.17",
 "@types/node": "^20.3.3",
 "@types/nodemailer": "^6.4.8",
 "body-parser": "^1.20.2",
 "express": "^4.18.2",
 "nodemailer": "^6.9.3",
 "nodemon": "^2.0.22",
 "ts-lint": "^4.5.1",
 "ts-node": "^10.9.1",
 "typescript": "^5.1.6"
 }
}
<पी> उपरोक्त फ़ाइल आपकी सभी स्थापित निर्भरताएँ दिखाती है। npm run dev जब आप dev का उपयोग करेंगे तो कमांड चलेगी स्क्रिप्ट.

एंडपॉइंट कैसे बनाएं

<पी> सबसे पहले करने वाली बात यह है कि src नामक एक नया फ़ोल्डर बनाएं . इस फ़ोल्डर में आपकी सभी कोड फ़ाइलें होंगी. इसमें पहली फ़ाइल एप्लिकेशन की रूट फ़ाइल होगी - app.ts फ़ाइल जैसा कि package.json में परिभाषित है फ़ाइल.

<पी> हम app.ts का उपयोग करेंगे आवश्यक पैकेजों को आयात करने के लिए फ़ाइल करें और ईमेल भेजने के लिए एकल एंडपॉइंट के साथ एक सरल सर्वर बनाएं जैसा कि नीचे देखा गया है:

import express from "express";
import bodyParser from "body-parser";
import nodemailer from "nodemailer";
const app = express();
app.use(bodyParser.json());
app.post("/send-email", async (req, res) => {
 const { from, to, subject, text } = req.body;
 // Use a test account as this is a tutorial
 const testAccount = await nodemailer.createTestAccount();
 const transporter = nodemailer.createTransport({
 host: "smtp.ethereal.email",
 port: 587,
 secure: false,
 auth: {
 user: testAccount.user,
 pass: testAccount.pass,
 },
 tls: {
 rejectUnauthorized: false,
 },
 });
 console.log("Sending mail to %s", to);
 let info = await transporter.sendMail({
 from,
 to,
 subject,
 text,
 html: `<strong>${text}</strong>`,
 });
 console.log("Message sent: %s", info.messageId);
 console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
 res.json({
 message: "Email Sent",
 });
});
app.listen(4300, () => {
 console.log("Server started at http://localhost:4300");
});
<पी> अब, आप npm run dev चलाकर अपना सर्वर प्रारंभ कर सकते हैं आपके टर्मिनल में. आपको Server started at [http://localhost:4300](http://localhost:4300) लिखा हुआ एक संदेश दिखना चाहिए आपके टर्मिनल में.

<पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना npm रन देव संदेश <पी> अब आप पोस्टमैन:

जैसे टूल का उपयोग करके समापन बिंदु का परीक्षण कर सकते हैं <पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना डाकिया पर समापन बिंदु परीक्षण <पी> जैसा कि स्क्रीनशॉट में दिखाया गया है, अनुरोध में लगभग 4 सेकंड लगे। समापन बिंदु के लिए यह बहुत धीमा है। यदि आप अपने टर्मिनल पर नज़र डालें, तो आपको एक यूआरएल भी दिखना चाहिए जहां आप भेजे गए ईमेल का पूर्वावलोकन कर सकते हैं।

<पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना

<पी> लिंक खोलने से आप देख सकते हैं कि ईमेल कैसा दिखता है।

<पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना ईमेल सामग्री

कतार कैसे बनाएं

<पी> प्रक्रिया को और भी तेज़ बनाने के लिए, ईमेल को बाद में भेजने के लिए कतारबद्ध किया जा सकता है और उपयोगकर्ता को तुरंत प्रतिक्रिया भेजी जा सकती है।

<पी> ऐसा करने के लिए, bull इंस्टॉल करें लाइब्रेरी और उसका @types लाइब्रेरी क्योंकि हम इसका उपयोग कतार बनाने के लिए करेंगे। वह है:

npm i bull @types/bull
<पी> bull का उपयोग करके एक नई कतार बनाना एक नया Bull इंस्टेंट करने जितना आसान है कतार के नाम के साथ ऑब्जेक्ट:

// This goes at the top of your file
import Bull from 'bull';
const emailQueue = new Bull("email");
<पी> जब कतार केवल कतार नाम के साथ बनाई जाती है, तो यह डिफ़ॉल्ट रेडिस कनेक्शन यूआरएल का उपयोग करने का प्रयास करती है:localhost:6379 . यदि आप किसी भिन्न URL का उपयोग करना पसंद करते हैं, तो बस Bull पर दूसरा ऑब्जेक्ट पास करें एक विकल्प वस्तु के रूप में वर्ग:

const emailQueue = new Bull("email", {
 redis: "localhost:6379",
});
<पी> इस बिंदु पर, आप नौकरी निर्माता के रूप में काम करने के लिए एक सरल फ़ंक्शन बना सकते हैं और हर बार अनुरोध आने पर कतार में नौकरी जोड़ सकते हैं।

type EmailType = {
 from: string;
 to: string;
 subject: string;
 text: string;
};
const sendNewEmail = async (email: EmailType) => {
 emailQueue.add({ ...email });
};
<पी> यह नव निर्मित फ़ंक्शन, sendNewEmail , EmailType प्रकार के भेजे जाने वाले नए ईमेल के विवरण वाले ऑब्जेक्ट को स्वीकार करता है . प्रेषक का ईमेल पता (from) है ), प्राप्तकर्ता का ईमेल पता (to ), subject ईमेल का, और ईमेल की सामग्री (text ). फिर यह एक नई नौकरी को कतार में धकेल देता है। <पी> अब आप अनुरोध के दौरान ईमेल भेजने के बजाय इस फ़ंक्शन का उपयोग कर सकते हैं। ऐसा करने के लिए समापन बिंदु को संशोधित करें:

app.post("/send-email", async (req, res) => {
 const { from, to, subject, text } = req.body;
 await sendNewEmail({ from, to, subject, text });
 console.log("Added to queue");
 res.json({
 message: "Email Sent",
 });
});
<पी> इस बिंदु पर, कोड सरल है और प्रक्रिया तेज़ है। अनुरोध में केवल 40 मीटर का समय लगता है - पहले की तुलना में लगभग 100 गुना तेज।

<पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना डाकिया के साथ समापन बिंदु परीक्षण <पी> इस बिंदु पर, ईमेल को एक कतार में जोड़ दिया जाता है। यह संसाधित होने तक कतार में रहेगा. कार्य को उसी एप्लिकेशन या किसी अन्य सेवा द्वारा संसाधित किया जा सकता है (यदि माइक्रोसर्विस सेटअप में)।

नौकरियों को कैसे संसाधित करें

<पी> यदि मेल कतार से कभी नहीं निकलते तो चक्र अधूरा और बेकार है। हम नौकरियों को संसाधित करने और कतार को साफ़ करने के लिए एक नौकरी उपभोक्ता बनाएंगे।

<पी> हम एक ऐसे फ़ंक्शन के लिए तर्क बनाकर ऐसा कर सकते हैं जो Job स्वीकार करता है आपत्ति जताता है और ईमेल भेजता है:

const processEmailQueue = async (job: Job) => {
 // Use a test account as this is a tutorial
 const testAccount = await nodemailer.createTestAccount();
 const transporter = nodemailer.createTransport({
 host: "smtp.ethereal.email",
 port: 587,
 secure: false,
 auth: {
 user: testAccount.user,
 pass: testAccount.pass,
 },
 tls: {
 rejectUnauthorized: false,
 },
 });
 const { from, to, subject, text } = job.data;
 console.log("Sending mail to %s", to);
 let info = await transporter.sendMail({
 from,
 to,
 subject,
 text,
 html: `<strong>${text}</strong>`,
 });
 console.log("Message sent: %s", info.messageId);
 console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
 return nodemailer.getTestMessageUrl(info);
};
<पी> उपरोक्त फ़ंक्शन Job स्वीकार करता है वस्तु. ऑब्जेक्ट में उपयोगी गुण होते हैं जो किसी कार्य में डेटा की स्थिति दर्शाते हैं। यहां, हम data का उपयोग करते हैं संपत्ति. <पी> इस बिंदु पर, हमारे पास केवल एक फ़ंक्शन है। यह स्वचालित रूप से नौकरियाँ नहीं उठाता क्योंकि यह नहीं जानता कि किस कतार के साथ काम करना है।

<पी> इसे कतार से जोड़ने से पहले, आप कुछ अनुरोध भेजकर कतार में कुछ नौकरियां जोड़ सकते हैं। आप अपने redis-cli में इस आदेश को चलाकर वर्तमान में कतारबद्ध ईमेल नौकरियों की जांच कर सकते हैं :

LRANGE bull:email:wait 0 -1
<पी> यह ईमेल प्रतीक्षा सूची की जाँच करता है, और ids लौटाता है प्रतीक्षारत नौकरियों की.

<पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना रेडिस सीएलआई <पी> मैंने यह दिखाने के लिए कुछ नौकरियाँ बनाई हैं कि श्रमिक वास्तव में कैसे काम करते हैं।

<पी> अब, कोड की इस पंक्ति को जोड़कर कार्यकर्ता को कतार से जोड़ें:

emailQueue.process(processEmailQueue);
<पी> यह आपका app.ts है फ़ाइल को अब उसका ध्यान रखना चाहिए:

import express from "express";
import bodyParser from "body-parser";
import nodemailer from "nodemailer";
import Bull, { Job } from "bull";
const app = express();
app.use(bodyParser.json());
const emailQueue = new Bull("email", {
 redis: "localhost:6379",
});
type EmailType = {
 from: string;
 to: string;
 subject: string;
 text: string;
};
const sendNewEmail = async (email: EmailType) => {
 emailQueue.add({ ...email });
};
const processEmailQueue = async (job: Job) => {
 // Use a test account as this is a tutorial
 const testAccount = await nodemailer.createTestAccount();
 const transporter = nodemailer.createTransport({
 host: "smtp.ethereal.email",
 port: 587,
 secure: false,
 auth: {
 user: testAccount.user,
 pass: testAccount.pass,
 },
 tls: {
 rejectUnauthorized: false,
 },
 });
 const { from, to, subject, text } = job.data;
 console.log("Sending mail to %s", to);
 let info = await transporter.sendMail({
 from,
 to,
 subject,
 text,
 html: `<strong>${text}</strong>`,
 });
 console.log("Message sent: %s", info.messageId);
 console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
};
emailQueue.process(processEmailQueue);
app.post("/send-email", async (req, res) => {
 const { from, to, subject, text } = req.body;
 await sendNewEmail({ from, to, subject, text });
 console.log("Added to queue");
 res.json({
 message: "Email Sent",
 });
});
app.listen(4300, () => {
 console.log("Server started at http://localhost:4300");
});
<पी> एक बार जब आप सहेज लेते हैं, तो आप देखेंगे कि सर्वर पुनरारंभ हो जाता है और तुरंत मेल भेजना शुरू कर देता है। ऐसा इसलिए है क्योंकि कार्यकर्ता कतार को देखता है और तुरंत प्रसंस्करण शुरू कर देता है।

<पी> Node.js और Redis के साथ संदेश कतारों में महारत हासिल करना:वेब ऐप प्रदर्शन को बढ़ावा देना सर्वर कतारबद्ध ईमेल भेज रहा है <पी> अब, निर्माता और कार्यकर्ता दोनों सक्रिय हैं। प्रत्येक नए एपीआई अनुरोध को कतार में धकेल दिया जाएगा, और कार्यकर्ता इसे तुरंत संसाधित करेगा जब तक कि पहले से ही कुछ लंबित कार्य न हों।

सारांश

<पी> मुझे आशा है कि इस लेख ने आपको यह समझने में मदद की है कि संदेश कतार क्या है, नौकरियां कैसे जोड़ें और उन्हें चलाने के लिए प्रक्रियाएं कैसे बनाएं, और आप बेहतर वेब एप्लिकेशन बनाने के लिए उनका उपयोग कैसे कर सकते हैं। आप इस आलेख में उपयोग की गई कोड फ़ाइलें GitHub पर पा सकते हैं।

<पी> यदि आपके पास कोई प्रश्न या प्रासंगिक सलाह है, तो कृपया उन्हें साझा करने के लिए मुझसे संपर्क करें।

<पी> मेरे अधिक लेख पढ़ने या मेरे काम का अनुसरण करने के लिए, आप लिंक्डइन, ट्विटर और जीथब पर मुझसे जुड़ सकते हैं। यह त्वरित है, यह आसान है और यह मुफ़्त है!

<पी> मुफ़्त में कोड करना सीखें. फ्रीकोडकैंप के ओपन सोर्स पाठ्यक्रम ने 40,000 से अधिक लोगों को डेवलपर्स के रूप में नौकरी पाने में मदद की है। आरंभ करें


  1. जावा में स्विंग घटक हल्के वजन वाले होते हैं, जबकि एडब्ल्यूटी घटक भारी वजन वाले क्यों होते हैं? जावा में स्विंग घटक हल्के वजन वाले होते हैं, जबकि एडब्ल्यूटी घटक भारी वजन वाले क्यों होते हैं?

    एडब्ल्यूटी सार विंडो टूलकिट के लिए खड़ा है और यह जावा जीयूआई प्रोग्रामिंग का समर्थन करता है। यह स्टैंड-अलोन जावा अनुप्रयोगों/एप्लेट्स के लिए एक पोर्टेबल जीयूआई पुस्तकालय है। जावा स्विंग . के दौरान AWT हमारे एप्लिकेशन और स्थानीय GUI के बीच संबंध प्रदान करता है GUI घटकों का एक सेट लागू करता है जो AWT

  1. CSS में कोई नहीं प्रदर्शित करें CSS में कोई नहीं प्रदर्शित करें

    किसी एलीमेंट को हटाने के लिए, CSS में डिस्प्ले नो प्रॉपर्टी वैल्यू का उपयोग करें। आइए कोई भी संपत्ति मूल्य लागू करने के लिए एक उदाहरण देखें - उदाहरण आइए अब एक उदाहरण देखें - <!DOCTYPE html> <html> <head> <style> span {    background-color: orange;    colo

  1. Matplotlib में लीजेंड पंक्तियों में शीर्षक कैसे जोड़ें? Matplotlib में लीजेंड पंक्तियों में शीर्षक कैसे जोड़ें?

    Matplotlib में लेजेंड पंक्तियों में शीर्षक जोड़ने के लिए, हम निम्नलिखित कदम उठा सकते हैं - फिगर साइज सेट करें और सबप्लॉट्स के बीच और आसपास पैडिंग को एडजस्ट करें। बनाएं y डेटा अंक numpy का उपयोग कर रहे हैं। मार्कर . की सूचियां बनाएं और लेबल । एक आकृति और सबप्लॉट का एक सेट बनाएं। प्लॉट