안드로이드 스마트폰 노드.js에 대해 다중 루틴 처리를 시도해 보았다

꿈은 주머니 속에서 펼쳐진다.
따라서 이번에는 Termux, 안드로이드는 노드를 사용했다.js 환경을 구축해 보세요.

가져오기


1. 어플리케이션 설치


Termux - Google Play
Android용 Linux 실행 환경
일반적인 터미널 에뮬레이터보다 더 높은 기능을 적용하고 Ubuntu 터미널에 가깝게 느껴진다.
DroidEdit - Google Play
고급 텍스트 편집기.
각 언어의 문법 중점과 축진에 대응하기 때문에 매우 편리하다.

2. Node.js 설치


Termux를 시작하여 작업을 진행합니다.
apt update
apt upgrade
apt 사용 가능.
Temux 전용 포장 창고가 연결되어 있습니다.
apt install coreutils
apt install nodejs
설치는 이것밖에 없어요.
Node.js 이외에 각종 스크립트 언어 엔진의 최신 버전의 2진법도 모두 갖추어진 것 같다.

3. 동작 확인

node -v
npm -v
나는 이미 Stable 버전을 설치했다고 생각한다.

시험해 보다


Express를 사용하는 간단한 웹 서버를 적어 보십시오.
멀티코어 SoC인 만큼 cluster도 모듈을 이용한 멀티스레드 처리를 시도했다.
npm inatall -g express
JavaScript
main.js
const cluster = require("cluster");
const fs = require("fs");

const express = require("/data/data/com.termux/files/usr/lib/node_modules/express");

const cpus = require("os").cpus().length;
const app = express();

const port = 8001;

if(cluster.isMaster){

  console.log("node.js test app");
  console.log("Listen: " + port);

  for(let i = 0; i < cpus; i++){
    cluster.fork();
  }

  cluster.on("fork", (worker)=>{
    console.log("Starting Worker ID: " + worker.id);
  });

  cluster.on("exit", (worker, code, signal)=>{
    console.log("Worker " + worker.id + " is died");
  });
}

else if(cluster.isWorker){

  app.get("/", (req, res)=>{
    console.log("Request from: " + req.connection.remoteAddress);

    res.setHeader("Content-Type", "text/html");
    res.send(fs.readFileSync("./index.html"));

    console.log("Processing Worker ID: " + cluster.worker.id);
  });

  app.listen(port);
}
HTML
index.html
<!DOCTYPE html>
<html>
  <head>
    <title>Node.js on Android!</title>

    <style>
      body {
        margin: 0;
        padding: 0;
        width: 100%;        
      }
    </style>

    <script>
      document.getElementById("bar").click = ()=>{
        const text = document.getElementById("foo").value;
        alert(text);
      }
    </script>
  </head>

  <body>
    <input type="text" id="foo"></input>

    <button id="bar">
      Click Here
    </button>
  </body>
</html>
node main.js

크롬으로 연결localhost:8001하면 페이지가 무사히 표시됩니다.
종착역에 6개의 워커가 있는지 확인할 수 있다.
3차례 정도 재부팅됐지만, 매번 다른 워커에게 할당되는 것도 확인했다.
이번에 사용한 스마트폰은 SM-G930F, 엑시노스8890은 8개 핵심으로 kernel의 전력 제어와 연관된 것으로 보이며 사용할 수 있는 핵심은 6개다.

총결산


움직이긴 했지만 세상이 금방 바뀌는 건 아니야...
지금까지 컴퓨터만 할 수 있었던 일을 점점 손바닥에서 할 수 있게 돼서 흥분되네요.
활용 방안이 느슨하다 느슨하다 여기서 끝내고 싶다.
그럼 안녕히 계세요.

좋은 웹페이지 즐겨찾기