چارچوب وب برای زبان برنامه نویسی 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” را برای آدرس وب سرور خود جایگزین کنید.