Cet article est l'article du 25ème jour du Calendrier de l'Avent Recruit Lifestyle 2018.
C'est @bya d'une équipe appelée CET.
La première étape de l'apprentissage d'une nouvelle langue n'est-elle pas «Hello World»? Dans cet article, je voudrais créer un serveur Web «Hello World» dans plusieurs langages de programmation, plutôt que de simplement afficher «Hello World». Utilisez autant que possible les bibliothèques standard sans utiliser le framework de serveur Web pour chaque langue.
Ah, aujourd'hui c'est le 25 décembre Noël, donc au lieu de «Hello World», le message «Joyeux Noël!» Est affiché.
De plus, je trouve difficile d'installer chaque langue sur ma machine locale, donc j'utilise Docker Image pour l'exécuter sur le conteneur.
Exécutez la commande suivante dans le directeur avec le Dockerfile et le code source.
docker build --tag server-xmas:latest . && docker run --rm -p 8080:8080 server-xmas:latest
Quand je l'ouvre sur le navigateur vers [localhost: 8080](http: // localhost: 8080), je reçois le message «Joyeux Noël!».
Ensuite, comparez la facilité d'écriture dans chaque langue.
Tout le monde, joyeux Noël !!!
Go
Placez le code source et Dockerfile comme indiqué ci-dessous et exécutez la commande docker ci-dessus.
├── Dockerfile
└── xmas
└── main.go
main.go
:
package main
import (
"fmt"
"log"
"net/http"
)
var greeting = "Merry Christmas! (go)"
func myHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, greeting)
}
func main() {
http.HandleFunc("/", myHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Dockerfile
FROM golang:1.8-alpine
COPY xmas /go/src/xmas
RUN go install xmas
FROM alpine:latest
COPY --from=0 /go/bin/xmas .
EXPOSE 8080
CMD ./xmas
Python
Une implémentation de python3. Placez le code source et Dockerfile comme indiqué ci-dessous et exécutez la commande docker ci-dessus.
.
├── Dockerfile
├── main.py
main.py
:
import http.server
import socketserver
GREETING = "Merry Christmas! (python3)"
class MyHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
self.wfile.write(bytes(GREETING, "utf-8"))
with socketserver.TCPServer(("", 8080), MyHandler) as httpd:
print("Server Running...")
httpd.serve_forever()
Dockerfile
FROM python:3.7-alpine
ENV DIR=/work
COPY main.py ${DIR}/main.py
WORKDIR ${DIR}
EXPOSE 8080
CMD python main.py
Java
En parlant de serveur web java, je pense que Spring
est utilisé, mais comme il n'affiche qu'un message, il est créé uniquement avec une bibliothèque standard.
Placez le code source et Dockerfile comme indiqué ci-dessous et exécutez la commande docker ci-dessus.
.
├── Dockerfile
├── main.java
main.java
:
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetSocketAddress;
class Main {
static final String GREETING = "Merry Christmas! (java)";
public static void main (String args[]) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/", new MyHandler());
server.setExecutor(null);
server.start();
}
static class MyHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
System.out.println("Server running...");
t.sendResponseHeaders(200, GREETING.length());
OutputStream outputStream = t.getResponseBody();
outputStream.write(GREETING.getBytes());
outputStream.close();
}
}
}
Dockerfile
FROM openjdk:8-jdk-alpine3.8
ENV DIR=/work
COPY main.java ${DIR}/main.java
WORKDIR ${DIR}
RUN javac main.java
EXPOSE 8080
CMD java Main
NodeJs
Je ne peux pas l'écrire avec du Javascript brut, donc je vais l'écrire avec nodejs!
Placez le code source et Dockerfile comme indiqué ci-dessous et exécutez la commande docker ci-dessus.
.
├── Dockerfile
├── main.js
main.js
:
const http = require('http');
const port = 8080;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Merry Christmas! (nodejs)\n');
});
server.listen(port, () => {
console.log(`Server running at http://localhost:${port}/`);
});
Dockerfile
FROM node:8.14-alpine
ENV DIR=/work
COPY main.js ${DIR}/main.js
WORKDIR ${DIR}
EXPOSE 8080
CMD node main.js
Ruby
Placez le code source et Dockerfile comme indiqué ci-dessous et exécutez la commande docker ci-dessus.
.
├── Dockerfile
├── main.rb
main.rb
:
const http = require('http');
require 'socket'
message = "Merry Christmas! (ruby)"
server = TCPServer.new 8080
loop do
client = server.accept
client.puts "HTTP/1.0 200 OK"
client.puts "Content-Type: text/plain"
client.puts
client.puts message
client.close
end
Dockerfile
FROM ruby:2.5-alpine
ENV DIR=/work
COPY main.rb ${DIR}/main.rb
WORKDIR ${DIR}
EXPOSE 8080
CMD ruby main.rb
Que diriez-vous de comparer ce qui précède? Ce serait formidable si vous pouviez voir la bonté de chacun.
Dans le prochain article, je vais également créer un serveur Web «Hello World!» En utilisant les principaux frameworks de chaque langue.
Le code source est également affiché sur Github.
Recommended Posts