مكتبة Http لانشاء وادارة خوادم الويب

#1

مكتبة Http

هي مختصة بالتعامل مع http من انشاء خادم Http او Https او خوادم WebSocket والمزيد للغة الأسس.

دوال

  • Http.createServer(callback: ptr[func (connection: ptr[Http.Connection]): Int], port: ptr[Char]): ptr[Http.Context]
    انشاء خادم Http بإستخدام port مخصص وتنفيذ callback مع اي طلب
  • Http.closeServer(context: ptr[Http.Context]): Void
    ايقاف الخادم
  • Http.print(connection: ptr[Http.Connection], format: ptr[Char], …any): Int
    طباعة نص للاتصال

مثال

import "Srl/Console.alusus";
import "Srl/String.alusus";
import "Srl/Memory.alusus";
import "Apm.alusus";
Apm.importFile("Alusus/Http");

module TestModule {
    use Srl;
    func start() {
        def context: ptr[Http.Context] = Http.createServer(callbackRequest~ptr, "8080"); // Server is running in separate thread, when navigating to http://localhost:8080/ will invoke callbackRequest
        Console.print("it's work in port 8080: http://localhost:8080/\npress enter to close server: ");
        Console.getChar(); // stop proccess here waiting user to press enter
        Http.closeServer(context); // stop the server
    };

    func callbackRequest(connection: ptr[Http.Connection]): Int {
        def requestInfo: ptr[Http.RequestInfo] = Http.getRequestInfo(connection);
        def content: array[Char, 1024];

        String.assign(content~ptr, "<h1>Welcome from alusus</h1><p> you are in \"%s\"", requestInfo~cnt.localUri);
        Http.print(connection, "HTTP/1.1 200 OK\r\n");
        Http.print(connection, "Content-Type: text/html\r\n");
        Http.print(connection, "Content-Length: %d\r\n\r\n", String.getLength(content~ptr));
        Http.print(connection, "%s", content~ptr);

        return 1;
    };
};

TestModule.start();

مستودع اللغة في Github:

2 Likes
#2

جميل جدا. يبدو أننا سنتمكن من إعادة كتابة موقع الأسس باستخدام الأسس نفسها :wink:

#3

بالإمكان ذلك الان
هل نبدا؟ :heart_eyes:

#4

سنحتاج أولاً إلى دعم https، ونحن حاليًا في الموقع نستخدم خدمة Let’s Encrypt للحصول على الشهادات اللازمة. إذا كان بالإمكان استخدام الشهادات من Let’s Encrypt لإجراء اتصالات مشفرة في حزمة Http فعندها نعم نستطيع أن نبدأ.

#5

اعتقد بالإمكان استخدام nginx او apache كـوكيل SSL للمنصة

#6

صحيح، يمكننا ذلك. لكن لا أدري إن كان الأولى التركيز على إكمال الدعم لhttps بما أن ذلك مطلب ملح للخوادم هذه الأيام.
لكن في حالة موقع الأسس أظنك محق لأننا في الحقيقة نحتاج أپاچي في كل الأحوال لتمكين المنتدى ولذلك فإن المنفذين 80 و 443 محجوزان من قبل أپاچي ولا مفر من استخدامه كوكيل.
إذا أردت البدء فلا بأس، سيكون مشروعًا مفيدًا لمعرفة النواقص التي نحتاج لإتمامها في حزمة Http.