20줄의 코드 HTTP 서버

Javascript도, Python도, Go도, PHP도, 캡슐화도 없습니다.

오늘은 Melang 이라는 새로운 코루틴 언어를 소개하려고 합니다.

Melang logo

Melang은 코루틴 동시 스크립팅 언어입니다. 컴파일 언어가 아닌 해석 언어입니다.

Melang에서 모든 스크립트 작업은 코루틴입니다. 또한 여러 스크립트 작업을 동일한 스레드 또는 다중 스레드에서 동시에 처리할 수 있습니다.

이는 Go의 코루틴과 매우 유사하지만 Melang의 코루틴은 적극적으로 CPU 실행 권한을 포기하거나 특정 함수를 호출하여 CPU 실행 권한을 간접적으로 포기할 필요가 없습니다. 대신 인터프리터가 특정 작업을 수행한 후 작업 실행이 자동으로 전환됩니다. 또한 개발자가 스위칭 타이밍을 고려할 필요가 없습니다.

Melang에서는 모든 스크립트 코드 논리가 동기화됩니다. 그러나 실제로는 인터프리터에 의해 비동기적으로 수행됩니다. 이는 비동기 프로그래밍에 익숙하지 않은 많은 개발자가 시작하는 데 도움이 됩니다.

다음은 간단한 HTTP 서버 예입니다.

/* filename: server.m */
net = import('net');
mq = import('mq');

listenfd = net.tcp_listen('127.0.0.1', '80');
for (i = 0; i < 4; ++i)
    eval('worker.mln', i);
while (true) {
    fd = net.tcp_accept(listenfd);
    mq.send('test', fd);
}



/* filename: worker.m */
sys = import('sys');
net = import('net');
mq = import('mq');

while (1) {
    fd = mq.recv('test');
    ret = net.tcp_recv(fd);
    if (ret) {
        net.tcp_send(fd, "HTTP/1.1 200 OK\r\nContent-Length: 1\r\n\r\na\r\n\r\n");
    } fi
    net.tcp_close(fd);
}


메인 코루틴(server.m)은 4개의 작업자 코루틴(worker.m)을 생성한 다음 클라이언트 TCP 설정을 기다리는 무한 루프에 들어갑니다.

작업자 코루틴(worker.m)은 기본 코루틴에서 설정된 TCP 소켓을 받은 다음 TCP에서 요청을 받은 다음 HTTP 응답을 보내고 마지막으로 소켓을 닫는 무한 루프에 있습니다.

다음으로 다음 명령을 사용하여 명령줄에서 스크립트를 시작할 수 있습니다.

$ melang server.m


시작되면 curl 또는 ab 와 같은 도구를 사용하여 액세스할 수 있습니다.

좋은 웹페이지 즐겨찾기