كما استطرادا صغير للمبتدئين في البرمجة المنطقية
في هذا النص
، ستعقد جلسة سحرية مع تعريض التعرض النهج
لإنشاء خادم REST ويتم قياس معالمه.
ما هي الفائدة؟ وكل شيء بسيط - سنفعل ذلك على Prolog (في تطبيق SWI-prolog) ...
إذن ما تحتاجه. أولاً ، قم بتنزيل (إن لم يكن بالفعل) ووضع برنامج إدارة المحتوى الفعلي
من موقعه على الانترنت
www.swi-prolog.org . من الأسهل إنشاء ملف صغير من النوع rest.pl مع المحتويات الأولية للنوع
الخادم.
مواصلة تنزيله وتحريره باستخدام نظام prolog نفسه ، مثل هذا
(يتم تقديم أمثلة لوحدة التحكم في نظام التشغيل linux ، ولكنها لا تختلف كثيرًا عن نظام windows):
$echo "." > rest.pl $swipl ... ?- [rest]. true. ?- edit().
بعد ذلك ، سيبدأ محرر شبيه بـ emac ويمكنك كتابة كل شيء فيه.
لذا ، في البداية ، سنشير إلى أننا سنستخدم المكتبات ونكتب ما يعنيه
إطلاق الخادم - في حروف المقدمة: - يمكن قراءته على أنه "هذا":
:- use_module(library(http/http_server)). :- use_module(library(http/http_json)). :- http_handler(/,(M), [method(M),methods([get,post]),time_limit(10000)]). :- http_server(http_dispatch, [port(8080)]).
كما ترون ، نخطط أن تستجيب الخدمة لطرق get و post.
مشكلة نموذجية
الآن في الواقع ما سنفعله. عند الطلب ، سنرد بصفحة تحتوي على حقل إدخال رقم ، عند إدخالها ، سنطلب طريقة النشر وحساب رقم فيبوناتشي.
هذا هو:
(get,_) :- (X),(X). (post,) :- http_parameters(,[val(,[integer])]), ().
حسنا ، هذا كل شيء! لقد كتبنا خادمنا بالفعل ... إن prolog لغة تعريفية - لذلك أعلنا عن خيارات المعالجة. بالمناسبة ، يمكن استخدام أي لغة - قررت الكتابة في أماكن باللغة الروسية.
لكن مهلا ، ماذا يفعل؟ بعد كل شيء ، "النموذج" ، "الإجابة" و "اختصار" هي مسنداتنا ولم يتم تعريفها بعد. دعونا إصلاحه:
():- format('Content-type: text/html~n~n <html><body> <br/> ~w </body></html>~n', []). ('<form method="POST"><input name="val"/></form>').
حسنًا ، إليك خياران للحساب - فلنحصل على أرقام فيبوناتشي الإيجابية فقط:
():- > 0, (0,1,1,,),(X), format(atom(),'~w ~w<br/>~w',[,,X]), (). ():- (X), format(atom(),' ~w 0<br/>~w',[,X]), ().
حسنًا ، يبقى تحديد عدد فيبوناتشي فعليًا:
(_F, F1, N, N, F1) :- !. (F0, F1, I, N, F) :- F2 is F0+F1, I2 is I + 1, !,(F1, F2, I2, N, F).
هذا التعريف ، بالطبع ، ليس مألوفًا تمامًا
في Feng Shui ، لكنه يعتبر أسرع تقريبًا مما لو كتبنا في C ...
فهل هذا العمل؟ نتحقق من:
?- . % Started server at http://localhost:8080/ true.
لذلك ، يبدو أن الخادم قد بدأ. بالمناسبة ، هو multithreaded! للتحقق تحتاج إلى فتح العنوان
127.0.0.1 : 8080 / وأدخل بعض الأرقام - على سبيل المثال ، 1000:
أرقام فيبوناتشي حساب
1000 رقم فيبوناتشي يساوي
4346655768693745643568852767504062580
2564660517371780402481729089536555417
9490518904038798400792551692959225930
8032263477520968962323987332247116164
2996440906533187938298969649928516003
704476137795166849228875
حسنا ، إنه يعمل!
دراسة صغيرة لأداء الخادم - دعونا نتحقق من طريقة GET (من الواضح أن اختبار POST يعتمد بشدة على عدد معين ، لذلك يتم النظر في رقم 10،000،000 ، بالطبع ، ولكن بضع ثوانٍ ...)
$ ab -k -c 4 -n 4000 http://127.0.0.1:8080/ ... Concurrency Level: 4 Time taken for tests: 0.283 seconds Complete requests: 4000 Failed requests: 0 Keep-Alive requests: 4000 Total transferred: 1108000 bytes HTML transferred: 544000 bytes Requests per second: 14140.57 [
ما يطلب 14140 في الثانية الواحدة مع 10 خيوط - وهذا أمر جيد للغاية لجهاز كمبيوتر منتظم!
ونعم ، مقدمة لديه مثل هذه الفرصة - نظرة منطقية. لذلك إذا قمت بتغيير شيء ما في الكود ، فأنت بحاجة فقط إلى الكتابة في وحدة التحكم
?- make.
وستعمل جميع التغييرات في طلبات جديدة - لا شيء يحتاج إلى التحميل الزائد أو إيقافه أو غير ذلك.
آمل أن تكون مهتمًا برؤية كيفية إنشاء خادم بقية بمثال بسيط. بالطبع ، يمكنك وصف الواجهة الباقية بشكل ثابت ، كما تم في المثال ، يمكنك إدخال جميع أنواع المتغيرات ، واستخدام جزء من مسار URL كمتغيرات - حسنًا ، بشكل عام ، كل شيء كالمعتاد.
يمكنك القيام بذلك بشكل حيوي ، وتغيير منطق البرنامج عن طريق إنشاء وحذف وتعديل المسوحات - نوع من خادم التعديل الذاتي ، الذي يعتمد عمله على السجل. يمكنك توصيل قواعد البيانات. بشكل عام ، كل شيء كالمعتاد ، مجرد العمل بسيط وممتع.