সি ++ কে সার্ভার-সাইড ওয়েব বিকাশের ভাষা হিসাবে ব্যবহার করা যেতে পারে? [বন্ধ]


34

আমি সার্ভার-সাইডে "স্ক্রিপ্টিং ভাষা" হিসাবে সি ++ ব্যবহার করে ওয়েব বিকাশে যেতে চাই। আমার সার্ভারের পরিকাঠামো * নিক্স ভিত্তিক, সুতরাং অ্যাজুরে সি ++ তে ওয়েব ডেভলপমেন্ট করা প্রযোজ্য নয় এবং সি ++ / সিএলআই এএসপি.নেটও প্রযোজ্য নয়।

লিগ্যাসি সিজিআই অ্যাপ্লিকেশনগুলি থেকে আলাদা করুন, সি ++ ব্যবহার করে ওয়েব ডেভলপমেন্ট করা যাবে?


33
অবশ্যই এটি সম্ভব , প্রশ্নটি হল; এটা কি ব্যবহারিক ?
এড এস

দেখুন এই প্রশ্নের উপর stackoverflow.com।
কেভিন ক্লিন

24
আপনি যদি ঝোঁক থাকেন তবে আপনি এসেম্বলিটিকে সার্ভার-সাইড ভাষা হিসাবে ব্যবহার করতে পারেন।
চ্যানেল 72

8
বা এমন কি Brainf * CK যদি ,হয় .একটি সকেট থেকে আপনাকে পুনঃনির্দেশিত করা হয়।
dan04

4
এটি আমি জড়িত প্রথম ওয়েব প্রকল্পের ভয়াবহ স্মৃতিগুলি ফিরিয়ে আনে। সি কোডের সিজিআই গেটওয়ে। আমি এখনও এটি কাঁপতে যখন আমি এটি সম্পর্কে চিন্তা! :-)
ব্রায়ান নোব্লাচ

উত্তর:


56

একেবারে।

এমনকি সেখানে তাদের উন্নয়নশীল সহ জন্য বিভিন্ন অবকাঠামো হয় WT , cppcms , সিএসপি , এবং অন্যদের। ফাস্টসিজিআইয়ের মূললাইন বাস্তবায়ন সিতে রয়েছে এবং সরাসরি সি ++ সহ বেশ কয়েকটি ভাষাকে সমর্থন করে ।

স্ট্রিংগুলিকে পার্স করতে পারে এমন কোনও প্রোগ্রামিং ল্যাঙ্গুয়েজ সিজিআই বা সার্লেটে ব্যবহার করা যেতে পারে। সি লাইব্রেরির সাথে বাইন্ডিংগুলি প্রয়োগ করতে পারে এমন কোনও ভাষা ISAPI- বা অ্যাপাচি-সামঞ্জস্যপূর্ণ সার্ভারগুলির মডিউল বিকাশ করতে ব্যবহার করা যেতে পারে।

এটি সি ++ তে বিশেষভাবে সহজ নয় এবং ভাল টেম্প্লেটিং ইঞ্জিনগুলি খুব কম এবং এর মধ্যে খুব কম তবে এটি করা যায়।

অবশ্যই, এটি একটি ভাল ধারণা কিনা তা নিয়ে প্রশ্ন পুরোপুরি আরেকটি বিষয়। :)

মনে রাখবেন: অ্যামাজন ডটকম, ইবে এবং গুগলের মতো প্রধান ওয়েবসাইটগুলি তাদের অবকাঠামোর অংশগুলির জন্য সি ++ ব্যবহার করে। তবে অনুধাবন করুন যে গুগল কেবল গতি-সমালোচনামূলক সিস্টেমগুলির জন্য সি ++ ব্যবহার করে এবং অ্যামাজন ডট কম কেবলমাত্র লিস্প থেকে সরে গেছে (যা তাদের কিছু সিনিয়র স্টাফকে রেগে গেছে :)।

ফেসবুক আগে পিএইচপি কে সি ++ তে সংকলন করেছিল তবে তাদের হিপহপ সংকলক (আংশিকভাবে সি ++ তে লিখিত) বায়কোড ভার্চুয়াল মেশিন হিসাবে পুনরায় তৈরি করা হয়েছে।


2
বিভিন্ন ফ্রেমওয়ার্ক উদ্ধৃত করার জন্য +1। আপনার যুক্ত করা উচিত যে (খুব) বড় ওয়েব অ্যাপ্লিকেশনগুলি সি ++ (এবং অন্যান্য ভাষা) দ্বারা চালিত করা উচিত: অ্যামাজন ডটকম,
গুগল

7
@ ক্লেইম: এটি সাধারণ, তবে এটি কোনও নিয়ম নয়। অ্যামাজনের আর্কিটেকচারটি historতিহাসিকভাবে লিস্প-ভিত্তিক এবং সম্প্রতি সি ++ তে নতুন করে লেখা হয়েছিল। গুগলের আর্কিটেকচারে জাভা, পাইথন এবং অন্যান্য প্রায়শই প্রায়শই সি ++ রয়েছে, যা বিভিন্ন কারণে রয়েছে। ফেসবুক এখন কেবল হিপহপ ব্যবহার করে কারণ তারা জানতে পেরেছে যে পিএইচপি স্কেল করে না। :)
গ্রেফ্যাডে

4
আমি সম্মত, তবে আমি বোঝাতে চাইছিলাম যে তারা এখনও সি ++ ব্যবহারের সুপরিচিত উদাহরণ - সরাসরি মূল প্রশ্নের শিরোনামের উত্তর দিতে।
ক্লাইম

1
@ জোহানেস ফেসবুকের স্কেলিং সমস্যাটি এই সত্য থেকে উদ্ভূত যে তাদের অপরিশোধিত পিএইচপি স্ক্রিপ্টের দুর্বল পারফরম্যান্সের কারণে, অন্যথায় প্রয়োজনীয়গুলির চেয়ে আরও বেশি সার্ভারের ক্রম বজায় রাখতে হবে। এত বড় পরিকাঠামোর জন্য লিনিয়ার স্কেলিং কেবল যথেষ্ট ভাল নয়। তবে মনে রাখবেন যে "ভাগ করা কিছুই নয়" পদ্ধতির পিএইচপি-র সাথে একচেটিয়া নয়। সি এবং সি ++ এটিও করতে পারে।
গ্রেফেইড

1
@amar জিনিসটি এই যে 0.1% অ্যাপ্লিকেশনগুলির যে কাঁচা পারফরম্যান্স প্রয়োজন তা বাদে খুব কম রিটার্ন পাওয়া যায়। আপনি ভাল ওয়েব স্ট্যাক সমর্থন সহ বেশিরভাগ অন্যান্য ভাষায় 1/3 সময় পরিবেশন করতে পারেন। ব্যাংক, ওয়েব বিজ্ঞাপনদাতারা, ইত্যাদি সমস্ত সি ++ অবলম্বন না করে প্রচুর পরিমাণে পরিবেশন করে। এমনকি ফেসবুকও। টুইটার. Stackoverflow। সবাই এটি উচ্চ স্তরের ভাষায় করে। এখানে থাকার জন্য তবে এটি আবার সংখ্যাগরিষ্ঠ হয়ে উঠবে না। সম্ভবত কখনও।
রিগ

18

কেন না?

OkCupid ডেটিং সাইট সি ++ দিয়ে তৈরি করা হয়। সম্ভবত অন্যান্য উদাহরণ আছে।

ডাব্লু ডাব্লুটি নামে পরিচিত সি ++ এর সাথে ওয়েব অ্যাপ্লিকেশন বিকাশের জন্য কিউটি-অনুপ্রাণিত একটি টুলকিটও রয়েছে


11
"কেন" না ? কারণ এই ভাষার জন্য আরও বেশি সমর্থন রয়েছে এমন একটি ভাষা ব্যবহার করা এটি অনেক সহজ easier
এড এস

5
@ এড এস। আমি এবং গ্রাইফ্যাড হিসাবে উল্লেখ করেছেন যে সি ++ সহ ওয়েব অ্যাপ্লিকেশনগুলি বিকাশের জন্য ফ্রেমওয়ার্ক রয়েছে।
পাই পাই

2
হ্যাঁ, তবে আবার, এগুলি কি সাধারণভাবে ব্যবহৃত ফ্রেমওয়ার্ক হিসাবে ব্যবহার করা যেমন সহজ? আমি সত্যই জিজ্ঞাসা করছি, আমি কোনও ওয়েব বিকাশকারী নই এবং আমি সেগুলি কখনও ব্যবহার করি নি, তবে কিছু আমাকে বলে যে তারা সম্ভবত তাদের রুবি / পাইথন / পিএইচপি সহযোগীদের মতো পরিপক্ক বা বহুল ব্যবহৃত হয় না।
এড এস

3
@ অ্যাডস: রুবি বা পাইথন উভয়ই ওয়েব ফ্রেমওয়ার্ক সহ শুরু করেন নি। আসলে তাদের উপস্থিত হতে এক দশক সময় লেগেছিল। কাঠামোগুলি হ'ল সমস্যাযুক্ত লোকদের জন্য এক্স ভাষা ব্যবহার করতে চাওয়া পর্যাপ্ত লোকের একমাত্র পরিণতি C সি ++ এর ক্ষেত্রেও এটি ঘটতে পারে। এটি না করানোর মূল কারণ: সি ++ পরিচালনা করা হয় না, সংকলন করতে যুগে যুগে লাগে এবং সাধারণভাবে এটির প্রবেশপথে উচ্চতর বাধা থাকে।
back2dos

1
@ back2dos: কে বলেছিলেন যে ওয়েবকে মাথায় রেখেই ভাষা তৈরি করা হয়েছিল? আমি অবশ্যই না। আমি "সমর্থন" শব্দটি ব্যবহার করেছি।
এড এস

11

আপনি যদি নিজের ওয়েব অ্যাপ্লিকেশনটি সি ++ তে লেখার পরিকল্পনা করছেন, তবে এটির সিজিআই হিসাবে ইন্টারফেস করা মোটেই অপচয় হবে।

আমার পরামর্শ হ'ল এএসআইও (অ্যাসিনক্রোনাস আই / ও) ব্যবহার করে এটি অ্যাসিক্রোনাস তৈরি করা । এটির সাথে আপনি জ্বলজ্বল দ্রুত ওয়েব পরিষেবা তৈরি করতে পারেন ( সেরা প্রভাবের জন্য বিপরীত প্রক্সি এবং স্ট্যাটিক্স সার্ভার হিসাবে এনজিনেক্সের সাথে একত্রিত ); ডাব্লুটি এর মতো টেম্পলেট লাইব্রেরির সাথে এটি একত্রিত করুন এবং আপনি একক সার্ভার থেকে প্রতি সেকেন্ডে কয়েক হাজার অনুরোধ জানাতে প্রস্তুত।

এটি গতিশীল ভাষার ওয়েব কাঠামোর ব্যবহারিক বিকল্প কিনা তা অন্য একটি বিষয়।


9

সংক্ষিপ্ত উত্তরটি হ'ল, কোনও ওয়েবপৃষ্ঠা লেখার জন্য এটি ব্যবহার করা যেতে পারে তবে তা ইনপুটটি পড়তে পারে, ব্যাখ্যামূলক আউটপুট লিখতে পারে এবং ওয়েব সার্ভারের দ্বারা নির্বাহযোগ্য হয়।

প্রযুক্তিগতভাবে, কোনও ভাষা সিজিআই স্ক্রিপ্ট হিসাবে এটি সরবরাহ করা হিসাবে ব্যবহার করা যেতে পারে:

  1. সার্ভার দ্বারা উপস্থাপিত সমস্ত ইনপুট এবং পরিবেশের ব্যাখ্যা করে
  2. পরিচিত মার্কআপ ভাষার আউটপুট (সাধারণত এইচটিএমএল)
  3. সার্ভার দ্বারা চালানো যেতে পারে

অন্যান্য উপায়ও রয়েছে। পার্লের সি / সি ++ কোডের চারপাশে মোড়ক হিসাবে তৈরি করার ক্ষমতা রয়েছে, দুটির মধ্যে ব্যাখ্যামূলক স্তর হিসাবে অভিনয় করে (এবং এটি পার্ল মডিউলগুলি অন্তর্ভুক্ত করে না যা সি হিসাবে সংকলিত সমতল)।


7

শুরুতে, এটি বেশ সাধারণ ছিল - 1990 এর দশকের শেষের দিকে আমি প্রথম যে ওয়েব সাইটগুলিতে কাজ করেছি সেগুলি সি ++ তে লিখিত আইএসএপিআই এক্সটেনশন ছিল এবং তারা বেশ ভালভাবে কাজ করেছিল।


3
কেউ কি?
লাল-ময়লা

বা এটিএল সার্ভার - atlserver.codeplex.com
gbjbaanb

5

মাইক্রোসফ্ট মনে হয় এটিও পারে বলে মনে করে। পরীক্ষা করে দেখুন কাসাব্লাংকা , যার জন্য সাধনী দ্বারা প্রয়োগকরণ একটি নতুন সেট নভোনীল সি ব্যবহার ++, (এটা দেখা যায়)।

ক্যাসাব্ল্যাঙ্কা হ'ল ক্লাউড কম্পিউটিং প্রতিনিধিত্ব করে এমন সফ্টওয়্যার আর্কিটেকচারে র‌্যাডিকাল শিফটটির সুবিধা নিতে চান এমন সি ++ বিকাশকারীদের সেরাভাবে কীভাবে সহায়তা করবেন তা অন্বেষণ করা শুরু করার একটি প্রকল্প।

ক্যাসাব্ল্যাঙ্কার সাথে আপনি যা পান তা এখানে:

  • উইন্ডোজ ভিস্তা, উইন্ডোজ 7, ​​এবং উইন্ডোজ 8 কনজিউমার প্রিভিউতে এইচটিটিপি, জেএসএন, এবং ইউআরআই-তে সংযোজক সি ++ বাইন্ডিং সরবরাহ করে আরএসটি পরিষেবাগুলি অ্যাক্সেসের জন্য সমর্থন
  • আপনার উইন্ডোজ 8 মেট্রো স্টাইল অ্যাপ্লিকেশনে আপনাকে সি ++ এইচটিটিপি ক্লায়েন্টের সাইড কোড লিখতে সহায়তা করার জন্য একটি ভিজ্যুয়াল স্টুডিও এক্সটেনশন এসডিকে
  • ভিজুয়াল স্টুডিও ইন্টিগ্রেশন সহ আজুরের জন্য নেটিভ-কোড REST লেখার জন্য সমর্থন
  • প্রথম শ্রেণীর প্ল্যাটফর্ম-হিসাবে-এ-পরিষেবা (PaaS) বৈশিষ্ট্য হিসাবে নেটিভ ক্লায়েন্টদের কাছ থেকে অ্যাজুরে ব্লব এবং সারি স্টোরেজ অ্যাক্সেসের জন্য সুবিধাজনক পাঠাগারগুলি
  • সি ++ 11 বৈশিষ্ট্যের ভিত্তিতে অ্যাসিক্রোনাস অপারেশন রচনা করার জন্য একটি সামঞ্জস্যপূর্ণ এবং শক্তিশালী মডেল
  • এরলং অভিনেতা-ভিত্তিক প্রোগ্রামিং মডেলটির একটি সি ++ বাস্তবায়ন
  • নমুনা এবং ডকুমেন্টেশন একটি সেট

2

পিএইচপি-র জন্য আপনি নিজের সি / সি ++ এক্সটেনশন লিখতে পারেন এবং সেভাবে ভাল পারফরম্যান্স সুবিধা পেতে পারেন। আমার ওয়েব অ্যাপ্লিকেশনটির সত্যই সিপিইউ নিবিড় অংশ থাকলে আমি সম্ভবত একটি ছোট সি ++ লাইব্রেরি তৈরি করতাম যা প্রসেসিংটিকে প্রসারণে লোড করে এবং তারপরে ফলাফলটি পিএইচপিতে ফিরিয়ে দেয় এবং তারপরে পিএইচপি এটি ব্রাউজারে আউটপুট করে।

অন্যান্য জিনিস যা লোকেরা প্রায়শই বিবেচনা করে না তা হ'ল নির্দিষ্ট সিপিইউ প্রসেসিংটি ক্লায়েন্টের পক্ষে যেমন জাভাস্ক্রিপ্ট / জিকুয়েরি অফলোড করা। যদি আমি একটি ওয়েব সার্ভার পেয়ে থাকি তবে একটি নির্দিষ্ট ক্রিয়াকলাপের জন্য সিপিইউ নিবিড় প্রক্রিয়াজাতকরণ করার জন্য আমার হয়তো এএইচএইচজেড সিপিইউ প্রয়োজন হতে পারে (সম্ভবত কিছু ডেটা প্রসেসিং)। আমার সংস্থা এটি চালিয়ে যাওয়ার জন্য প্রতি মাসে সেই সার্ভারের জন্য অর্থ প্রদান করে। যদি আমি একই সময়ে সেই সিপিইউ নিবিড় কাজটি চালাও এমন 100 সমবর্তী ব্যবহারকারীদের জন্য ক্রিয়াকলাপ বাড়িয়ে তুলতে চাই তবে আমার একাধিক সিপিইউ এবং সার্ভারের প্রয়োজন হবে, আমার ব্যবসায়ের ব্যয় বাড়িয়ে তুলতে। যদি আমি সেই সিপিইউ নিবিড় কাজটি ক্লায়েন্টের পক্ষে অফলোড করি, তবে ওয়েবসাইটটি পরিদর্শন করা প্রতিটি ব্যবহারকারী ডেটাতে তাদের নিজস্ব প্রসেসিং করতে পারে এবং আমার সার্ভারের ক্ষমতা বাড়ানোর দরকার নেই তাই আমার অর্থ সাশ্রয় করতে পারে।

সর্বোপরি আপনার জন্য প্রসেসিং করা 100+ ডেস্কটপ / ট্যাবলেট / মোবাইলগুলির সম্মিলিত শক্তি সহ যা আপনার সার্ভারটি ডেটাসেন্টারে বসে প্রতিমাসে আপনার ব্যবসায়িক অর্থের ব্যয় চালিয়ে যাওয়ার চেয়ে অনেক বেশি শক্তি। সম্ভবত আপনার সমস্ত সার্ভার কাজ করবে ডাটাবেস থেকে ডেটা পুনরুদ্ধার করা, বিষয়বস্তু পরিবেশন করা এবং ডাটাবেসে ফিরে সঞ্চয় করার আগে কিছুটা প্রাক / পোস্ট প্রসেসিং এবং বৈধতা। স্পষ্টতই আপনি ক্লায়েন্টের সাইড কোডটি খুব সিপিইউ নিবিড় করে তুলবেন না যা ওয়েব ব্রাউজারের ইউআই ব্লক / ফ্রিজ করতে পারে, আপনি সার্ভারের কাছে একটি এজেএক্স অনুরোধ বন্ধ করতে পারেন, ডেটা পুনরুদ্ধার করতে পারেন এবং তারপরে ওয়েবটি রেখে অ্যাসিঙ্ক্রোনালি ক্লায়েন্ট-সাইডে ডেটা প্রক্রিয়া করতে পারেন ব্রাউজার ইউআই সম্পূর্ণরূপে ব্যবহারযোগ্য।


2

হ্যাঁ, এটি ব্যবহার করা যেতে পারে। অন্যরা বিভিন্ন পদ্ধতির উল্লেখ করেছেন। এখানে আমার নিজস্ব পদ্ধতি। সুবিধাটি হ'ল এটি সম্পূর্ণ পোর্টেবল এবং স্ব-অন্তর্নিহিত, সমস্ত বাছাই করা লাইব্রেরি কেবল এএনএসআই সি এর উপর নির্ভর করে এটি সেট আপ করার জন্য কেবল লিনাক্স কার্নেল এবং একটি সি সংকলক প্রয়োজন (এবং স্পষ্ট স্টাফ যেমন ব্যাসিবক্স, ব্যাশ ইত্যাদি) (বা উইন্ডোজ) এবং একটি সংকলক), কোনও অতিরিক্ত গ্রন্থাগার প্রয়োজন নেই, অভিনব বিশাল ইনস্টলেশন নেই।

ফলাফলটি একটি একক প্রোগ্রাম যা উভয় ওয়েব সার্ভার এবং একটি গতিশীল পৃষ্ঠা জেনারেটর ("অ্যাপাচি" এবং "পিএইচপি" উভয়ই সাবস্টিটিউট করে), এতে স্ক্লাইটের মাধ্যমে ডেটাবেস অ্যাক্সেসও থাকবে।

ব্যবহৃত গ্রন্থাগারগুলি:

  • মঙ্গুজ - এইচটিপি সার্ভার
  • স্ক্লাইট - এসকিউএল ডেটাবেস
  • MiniXML - গতিশীল পৃষ্ঠা জেনারেশনকে সহজ করে তোলে। জাভাস্ক্রিপ্ট এর মত সাজানcreateElement

এই উত্তরটির বাকি অংশটি লিনাক্সের জন্য একটি সম্পূর্ণ সেট আপ গাইড। এসকি্লাইট এবং মিনিএক্সএমএল উভয়ই .চ্ছিক, তবে গাইডটি সম্পূর্ণ ইনস্টলেশনটি কভার করে। আপনি যদি স্ক্লাইট বা মিনিএক্সএমএল নিষ্ক্রিয় করতে আগ্রহী হন তবে অপ্রয়োজনীয় অংশগুলি সম্পর্কে মন্তব্য করা আপনার উপর নির্ভর করবে।

1. 3 টি গ্রন্থাগার ডাউনলোড করুন

২. আপনার ফোল্ডারটি প্রস্তুত করুন

  • একটি খালি ফোল্ডার তৈরি করুন (আমরা এটিকে মূল ফোল্ডার বলব)
  • এটিতে নিম্নলিখিত ফাইলগুলি রাখুন:
    • স্ক্লাইট ট্যারি.gz থেকে: sqlite3.c , sqlite3.h
    • মঙ্গুজ জিপ থেকে: mongoose.c , mongoose.h
    • এমএক্সএমএল টার.gz থেকে: mxml.h

3. এমএক্সএমএল সংকলন করুন

আপনি লক্ষ করেছেন এমএক্সএমএল.সি অনুপস্থিত, এটি কারণ আমাদের একটি স্ট্যাটিক এমএক্সএমএল লাইব্রেরি তৈরি করা দরকার। যেখানে mxML tar.gz ডাউনলোড হয়েছিল এবং ফোল্ডারে যান সেখানে সম্পাদনা করুন:

tar -xvf mxml-<version>.tar.gz #Extract the tar
cd mxml-<version> #Go to the newly extracted directory
./configure #prepare the compiler
make #compile, you may need to install "make" first.

সংকলন শেষ হয়ে গেলে, অনেকগুলি ফাইল উত্পন্ন হবে, আমাদের আগ্রহের একমাত্র ফাইল হ'ল libmxml.aফাইলটি মূল ফোল্ডারে অনুলিপি করুন।

৩.১ ডাবল চেক

মূল ফোল্ডারে নিম্নলিখিতটি রয়েছে তা পরীক্ষা করুন:

  • মঙ্গুজের জন্য: mongoose.c, mongoose.h
  • এমএক্সএমএল এর জন্য: libmxml.a, mxml.h
  • স্ক্লাইটের জন্য: sqlite.c, sqlite.h

4. main.c

আসল প্রোগ্রামটি তৈরি করা যাক, main.cমূল ফোল্ডারে একটি ফাইল তৈরি করুন, এটি শুরু করার জন্য এখানে একটি কঙ্কাল le

#include <string.h>
#include <stdio.h>

#include "mongoose.h"
#include "mxml.h"
#include "sqlite3.h"

/***Sqlite initialization stuff***/
//comment out everything sqlite related if you don't want sqlite, including the callback function and the include "sqlite3.h"
static int callback(void * custom, int argc, char **argv, char **azColName);
char *zErrMsg = 0;
sqlite3 *db;
int rc;

/***Just some laziness shortcut functions I made***/
typedef mxml_node_t * dom; //type "dom" instead of "mxml_node_t *"
#define c mxmlNewElement   //type "c" instead of "mxmlNewElement"
inline void t(dom parent,const char *string) //etc
{
    mxmlNewText(parent, 0, string);
}

//type "sa" instead of "mxmlElementSetAttr"
inline void sa(dom element,const char * attribute,const char * value) 
{
    mxmlElementSetAttr(element,attribute,value);
}




//The only non boilerplate code around in this program is this function
void serve_hello_page(struct mg_connection *conn)
{
    char output[1000];
    mg_send_header(conn,"Content-Type","text/html; charset=utf-8");
    mg_printf_data(conn, "%s", "<!DOCTYPE html>");
    //This literally prints into the html document


    /*Let's generate some html, we could have avoided the
     * xml parser and just spat out pure html with mg_printf_data
     * e.g. mg_printF_data(conn,"%s", "<html>hello</html>") */

    //...But xml is cleaner, here we go:
            dom html=mxmlNewElement(MXML_NO_PARENT,"html");
                dom head=c(html,"head");
                    dom meta=c(head,"meta");
                    sa(meta,"charset","utf-8");
                dom body=c(html,"body");
                    t(body,"Hello, world<<"); //The < is auto escaped, neat!
                    c(body,"br");
                    t(body,"Fred ate bred");    
                dom table=c(body,"table");
                sa(table,"border","1");

                //populate the table via sqlite
                rc = sqlite3_exec(db, "SELECT * from myCoolTable", callback, table, &zErrMsg);
                if( rc!=SQLITE_OK )
                {
                    fprintf(stderr, "SQL error: %s\n", zErrMsg);
                    sqlite3_free(zErrMsg);
                }

            mxmlSaveString (html,output,1000,  MXML_NO_CALLBACK);
            mg_printf_data(conn, "%s", output);
            mxmlDelete(html); 
}

//sqlite callback
static int callback(void * custom, int argc, char **argv, char **azColName)
{
    //this function is executed for each row
    dom table=(dom)custom;

    dom tr=c(table,"tr");
    dom td;
    int i;
    for(i=0; i<argc; i++)
    {
        td=c(tr,"td");
        if (argv[i])
            t(td, argv[i]);
        else
            t(td, "NULL");

        printf("%s == %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
     printf("\n");
     return 0;
}


static int event_handler(struct mg_connection *conn, enum mg_event ev)
{
    if (ev == MG_AUTH)
    {
        return MG_TRUE;   // Authorize all requests
    }
    else if (ev == MG_REQUEST)
    {
        if (!strcmp(conn->uri, "/hello"))
        {
            serve_hello_page(conn);
            return MG_TRUE;   // Mark as processed
        }
    }
    return MG_FALSE;  // Rest of the events are not processed

}

int main(void)
{
    struct mg_server *server = mg_create_server(NULL, event_handler);
    //mg_set_option(server, "document_root", "."); //prevent dir listing and auto file serving
    //TODO can I allow file listing without dir listing in a specified directory?
    mg_set_option(server, "listening_port", "8080");


    rc = sqlite3_open("db.sqlite3", &db); 

    if( rc )
    {
        fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        return(1);
    }

    printf("Server is running on port 8080!\n");
    for (;;)
    {
        mg_poll_server(server, 1000);  // Infinite loop, Ctrl-C to stop
    }
    mg_destroy_server(&server);
    sqlite3_close(db);

    return 0;
}




/*
 * useful stuff:
 * mg_send_file(struct mg_connection *, const char *path); - serve the file at *path*/

অবশেষে, সংকলন!

সংকলন করা যাক। cdআপনার মূল ফোল্ডারে যান এবং এগুলি সম্পাদন করুন:

gcc -c main.c
gcc -c mongoose.c
gcc -c sqlite3.c
gcc -o server.out main.o mongoose.o sqlite3.o -ldl -lpthread -lmxml -L . 

এখন, এর সাথে সার্ভার.আউট কার্যকর করুন /server.outএবং এতে নেভিগেট করুনlocalhost:8080/hello

সম্পন্ন :)



@ হেই: এই মঙ্গুজ বিকল্পটি দেখানোর জন্য ধন্যবাদ, আমি সর্বদা সম্প্রদায়-চালিত প্রকল্পগুলি পছন্দ করি। আমি পুরোপুরি পরীক্ষা করার পরে আমার উত্তরটিতে মঙ্গুজকে সম্ভবত সিভেটওয়েভের সাথে প্রতিস্থাপন করব।
হ্যালো ওয়ার্ল্ড

0

আমি অনুমান করি যে বেশ কয়েকটি এম্বেড থাকা সিস্টেমে (যেমন রাউটার, প্রিন্টার, ...) কিছু সি ++ চালিত ওয়েব সার্ভার রয়েছে।

বিশেষত, আপনি কিছু সিটি বা সি ++ প্রোগ্রামে কিছু ওয়েব ক্ষমতা যুক্ত করতে বা কিছু ওয়েব ইন্টারফেসের সাথে একটি হালকা সার্ভার বিকাশের জন্য কিছু HTTP সার্ভার লাইব্রেরিটি লাইবোনিয়নের মতো ব্যবহার করতে পারেন ।

কিছু লোক ওসিগেল ব্যবহার করে ওকেমলে তাদের ওয়েব সার্ভার বা তাদের এইচটিটিপি ইন্টারফেস কোডিং করছে । প্রতিটি ওয়েব জিনিস পিএইচপি হয় না। এবং ফাস্টসিজিআই দিয়ে আপনি আপনার অ্যাপ্লিকেশনটিতে কিছু গতিশীল ওয়েব প্রসেসিং করতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.