সমস্যা
আমার একটি ফর্ম রয়েছে যা জমা দেওয়া হলে, জমা দেওয়া তথ্যগুলি প্রক্রিয়াকরণের জন্য বেসিক কোডটি চালাবে এবং কোনও বিজ্ঞপ্তি ওয়েবসাইটে প্রদর্শনের জন্য এটি একটি ডাটাবেসে সন্নিবেশ করবে। এছাড়াও, আমার কাছে ইমেল এবং এসএমএস বার্তার মাধ্যমে এই বিজ্ঞপ্তিগুলি পেতে সাইন আপ করা ব্যক্তিদের একটি তালিকা রয়েছে। এই তালিকাটি মুহূর্ত হিসাবে তুচ্ছ (কেবলমাত্র দেড়শো ধাক্কা দিচ্ছে), তবে এটি গ্রাহকদের পুরো টেবিলের মধ্যে দিয়ে এক মিনিটের বেশি সময় নেয় এবং 150+ ইমেল প্রেরণ করতে পারে তাই যথেষ্ট। (গণ ইমেল নীতিগুলির কারণে আমাদের ইমেল সার্ভারের সিস্টেম প্রশাসকদের অনুরোধ অনুসারে ইমেলগুলি পৃথকভাবে প্রেরণ করা হচ্ছে))
এই সময়ে, সতর্কতা পোস্টকারী ব্যক্তি তার বিজ্ঞপ্তি পোস্ট করা হচ্ছে এমন কোনও ইতিবাচক শক্তিবৃদ্ধি ছাড়াই প্রায় এক মিনিটের জন্য ফর্মের শেষ পৃষ্ঠায় বসে থাকবে। এটি অন্যান্য সম্ভাব্য সমস্যার দিকে নিয়ে যায়, আমার মনে হয় এমন সম্ভাব্য সমাধানগুলি আদর্শের চেয়ে কম।
প্রথমত, পোস্টারটি মনে করতে পারে যে সার্ভারটি পিছিয়ে যাচ্ছে এবং আবার 'জমা দিন' বোতামটি ক্লিক করুন, যার ফলে স্ক্রিপ্টটি আবার শুরু হবে বা দুবার চালিত হবে। আমি জাভাস্ক্রিপ্ট ব্যবহার করে বোতামটি অক্ষম করতে এবং পাঠ্যটিকে 'প্রসেসিং ...' এর মতো কিছু বলার বদলে সমাধান করতে পারি, তবে এটি আদর্শের চেয়ে কম নয় কারণ ব্যবহারকারী এখনও স্ক্রিপ্টের প্রয়োগের দৈর্ঘ্যের জন্য পৃষ্ঠায় আটকে থাকবে। (এছাড়াও, যদি জাভাস্ক্রিপ্ট অক্ষম করা থাকে তবে এই সমস্যাটি এখনও বিদ্যমান))
দ্বিতীয়ত, পোস্টারটি ফর্ম জমা দেওয়ার পরে অকাল আগেই ট্যাব বা ব্রাউজারটি বন্ধ করে দিতে পারে। স্ক্রিপ্টটি সার্ভারে চলমান থাকবে যতক্ষণ না এটি ব্রাউজারে আবার লেখার চেষ্টা করে তবে ব্যবহারকারী যদি আমাদের ডোমেনের মধ্যে কোনও পৃষ্ঠাতে ব্রাউজ করে (স্ক্রিপ্টটি এখনও চলমান থাকে), স্ক্রিপ্টটি শেষ না হওয়া পর্যন্ত ব্রাউজারটি পৃষ্ঠাটি লোড করে ঝুলিয়ে রাখে । (এটি তখনই ঘটে যখন ব্রাউজারের কোনও ট্যাব বা উইন্ডোটি সম্পূর্ণ ব্রাউজার অ্যাপ্লিকেশনটি বন্ধ না হয়ে থাকে not) তবুও, এটি আদর্শের চেয়ে কম নয়।
(সম্ভাব্য) সমাধান
আমি সিদ্ধান্ত নিয়েছি আমি নোটিফিকেশন পোস্ট হওয়ার পরে কল করতে পারি একটি পৃথক ফাইলে স্ক্রিপ্টের "ইমেল" অংশটি ছিন্ন করতে চাই। বিজ্ঞপ্তিটি সফলভাবে পোস্ট হওয়ার পরে আমি মূলত এটি নিশ্চিতকরণ পৃষ্ঠায় রাখার কথা ভেবেছিলাম। তবে, ব্যবহারকারীরা জানতে পারবেন না যে এই স্ক্রিপ্টটি চলছে এবং কোনও অসঙ্গতি তাদের কাছে প্রকাশিত হবে না; এই স্ক্রিপ্ট ব্যর্থ হতে পারে।
তবে, আমি যদি এই স্ক্রিপ্টটি পটভূমি প্রক্রিয়া হিসাবে চালাতে পারি? সুতরাং, আমার প্রশ্নটি হ'ল: আমি কীভাবে একটি পিএইচপি স্ক্রিপ্ট কার্যকর করতে পারি যে পটভূমির পরিষেবা হিসাবে ট্রিগার করতে এবং ব্যবহারকারীর ফর্ম পর্যায়ে যা করেছেন তার থেকে সম্পূর্ণ স্বাধীন চালাতে পারি?
সম্পাদনা: এটি ক্রোন করা যাবে না । এটি তাত্ক্ষণিকভাবে চালানো উচিত ফর্মটি জমা দেওয়া হয়েছে। এগুলি উচ্চ-অগ্রাধিকারের বিজ্ঞপ্তি। এছাড়াও, আমাদের সার্ভারগুলিতে পরিচালিত সিস্টেম প্রশাসকরা 5 মিনিটেরও বেশি বার বার ক্রোন চালানোর অনুমতি দেয় না।
exec()
তবে আমি কখনই এটি ব্যবহার করে দেখিনি।
ajax
এবং সন্নিবেশ sleep()
করান (আমি আমার ক্ষেত্রে ফরচ ব্যবহার করি) এটি আমার সার্ভারে পুরোপুরি কাজ করে। অন্যদের সম্পর্কে নিশ্চিত নয়। আমি এটি যোগ করছি ignore_user_abort()
এবং set_time_limit()
(গণনা করা শেষ সময় সহ) লুপের আগে এটি নিশ্চিত করতে যে আমি যে সার্ভারটি ব্যবহার করি তা দ্বারা স্ক্রিপ্টটি বন্ধ হবে না, এমনকি আমার পরীক্ষার অনুসারে, স্ক্রিপ্টটি ছাড়া ignore_user_abort()
এবং টাস্কটি সম্পূর্ণ করে set_time_limit()
।
gearman
পিএইচপি ব্যবহার করে পটভূমি কাজগুলি মোকাবেলা করতে। আপনি বড় সময় প্রক্রিয়াজাতকরণ এবং ভারী বোঝা নিয়ে এসে পৌঁছলে এটি স্কেল করা নিখুঁত। আপনার এটি একবার দেখা উচিত।