برنامه نویسی

چارچوب وب برای زبان برنامه نویسی C

گلف دارای یک حالت “گسترده” است که امکان استفاده مستقیم از کد C را فراهم می کند. به طور معمول ، این مجاز نیست ، اما اگر در پرونده .golf خود از بیانیه حالت طولانی استفاده می کنید ، می توانید از آن با کد C تماس بگیرید.

در حالت گسترده ، گلف در واقع یک چارچوب وب برای زبان برنامه نویسی C است. برای اطلاعات بیشتر در مورد پیامدهای ایمنی حافظه ، این مطلب را بخوانید.

در اینجا مثال استفاده از گلف به عنوان یک چارچوب وب برای C. در این حالت یک عملکرد ساده C برای محاسبه فاکتوریل شماره AA است. سپس ما این عملکرد را در یک برنامه وب به همان اندازه ساده قرار خواهیم داد.

برنامه گلف را ایجاد کنید

mkdir -p c-for-web
cd c-for-web
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برنامه “واقعیت” را ایجاد کنید (“-K”):

gg -k fact
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

موارد زیر را در پرونده “calc-fact.golf” ذخیره کنید. این سرویس وب است که با مشتریان وب (مانند مرورگرها) تعامل خواهد داشت. همچنین عملکرد C را فراخوانی می کند که در زیر کمی بیشتر ایجاد خواهیم کرد:

extended-mode // extended mode in order to call C code

%% /calc-fact public
    get-param par // get input parameter from URL
    string-number par to num // convert to number
    set-number result 
    call-extended factorial(num, &result) // call C function
    // Output result
    @Factorial of <> is <>
%%
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

کد C را به برنامه گلف اضافه کنید

بعد ، پرونده C “factorial.c” را ایجاد کنید. این عملکرد C است که ما از کد گلف در بالا تماس می گیریم:

#include "golf.h"

// Compute factorial of f, and store result into res
void factorial(gg_num f, gg_num *res)
{
    *res = 1;
    gg_num i;
    for (i = 2; i <= f; i++) {
        *res *= i;
    }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و یک پرونده شامل “factorial.h” برای اعلام هر عملکرد (های) ما در کد گلف استفاده خواهیم کرد:

void factorial(gg_num f, gg_num *res);
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سرور را کامپایل و راه اندازی کنید

گلف همه .golf و همچنین پرونده .c و .h را انتخاب می کند و آنها را به یک برنامه تبدیل می کند:

gg -q 
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سرور را شروع کنید:

mgrg fact
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

سرور را از خط فرمان آزمایش کنید

می توانید این برنامه وب را از خط فرمان آزمایش کنید (توجه داشته باشید -پرچم خدمات!). این مفید است زیرا شما می توانید برنامه های وب را فقط از خط فرمان توسعه دهید:

gg -r --req=/calc-fact/par=12 --exec --service
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

نتیجه این است:

Content-Type: text/html;charset=utf-8
Cache-Control: max-age=0, no-cache
Pragma: no-cache
Status: 200 OK

Factorial of 12 is 479001600
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این داده های دقیقی است که به یک مشتری واقعی وب ارسال می شود.

سرور را با مرورگر وب آزمایش کنید

بیایید روی یک سرور وب واقعی تست کنیم. در این حالت ما از nginx استفاده خواهیم کرد. همچنین ، ما این کار را به صورت محلی در رایانه شما انجام خواهیم داد ، زیرا همه افراد سرور در وب ندارند.

اول ، پرونده پیکربندی Nginx را ویرایش کنید ، که برای اوبونتو/دبیان در:

/etc/nginx/sites-enabled/default
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

و در Fedora/Redhat در:

/etc/nginx/nginx.conf
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

توجه داشته باشید که ممکن است برای ویرایش این پرونده ها از “sudo” استفاده کنید زیرا آنها معمولاً توسط کاربران معمولی قابل نوشتن نیستند.

بخش “سرور” را پیدا کنید و این را در داخل آن اضافه کنید:

location /fact/ { include /etc/nginx/fastcgi_params; fastcgi_pass  unix:///var/lib/gg/fact/sock/sock; }
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این کار NGINX را با سرور “واقعیت” که از بالا شروع کرده اید متصل می کند. هرگونه درخواست با یک مسیر URL که با “/fact/” شروع می شود به سرور شما تحویل داده می شود و پاسخ به صورت معکوس انجام می شود و در نهایت به مشتری (مانند مرورگر وب) تحویل داده می شود.

سرور nginx را برای این کار دوباره راه اندازی کنید:

sudo systemctl restart nginx
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

آن را از طریق مرورگر وب با این URL امتحان کنید:

http://127.0.0.1/fact/calc-fact/par=8
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر nginx شما روی درگاه دیگری اجرا می شود ، آن را مشخص کنید ، به عنوان مثال اگر در پورت 81 اجرا شود ، به جای آن از “127.0.0.1:81” استفاده کنید.

نتیجه این است:

Factorial of 8 is 40320
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

البته اگر سرور در وب دارید ، کافی است “127.0.0.1” را برای آدرس وب سرور خود جایگزین کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا