Dieser Artikel ist der Artikel zum 25. Tag von Recruit Lifestyle Adventskalender 2018.
Dies ist @bya von einem Team namens CET.
Ist das nicht der erste Schritt beim Erlernen einer neuen Sprache, "Hallo Welt"? In diesem Artikel möchte ich einen "Hello World" -Webserver in mehreren Programmiersprachen erstellen, anstatt nur "Hello World" auszugeben. Verwenden Sie Standardbibliotheken so oft wie möglich, ohne das Webserver-Framework für jede Sprache zu verwenden.
Ah, heute ist der 25. Dezember, also wird anstelle von "Hallo Welt" die Meldung "Frohe Weihnachten!" Angezeigt.
Außerdem finde ich es umständlich, jede Sprache auf meinem lokalen Computer zu installieren, sodass ich Docker Image verwende, um sie auf dem Container auszuführen.
Führen Sie den folgenden Befehl im Director mit der Docker-Datei und dem Quellcode aus.
docker build --tag server-xmas:latest . && docker run --rm -p 8080:8080 server-xmas:latest
Wenn ich es im Browser auf [localhost: 8080](http: // localhost: 8080) öffne, erhalte ich die Meldung "Frohe Weihnachten!".
Vergleichen Sie dann bitte die Leichtigkeit des Schreibens in jeder Sprache.
Alle frohe Weihnachten !!!
Go
Platzieren Sie den Quellcode und die Docker-Datei wie unten gezeigt und führen Sie den Docker-Befehl oben aus.
├── 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
Eine Implementierung von Python3. Platzieren Sie den Quellcode und die Docker-Datei wie unten gezeigt und führen Sie den Docker-Befehl oben aus.
.
├── 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
Apropos Java-Webserver: Ich denke, dass "Spring" verwendet wird, aber da nur eine Nachricht angezeigt wird, wird es nur mit einer Standardbibliothek erstellt.
Platzieren Sie den Quellcode und die Docker-Datei wie unten gezeigt und führen Sie den Docker-Befehl oben aus.
.
├── 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
Ich kann es nicht mit rohem Javascript schreiben, also schreibe ich es mit nodejs!
Platzieren Sie den Quellcode und die Docker-Datei wie unten gezeigt und führen Sie den Docker-Befehl oben aus.
.
├── 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
Platzieren Sie den Quellcode und die Docker-Datei wie unten gezeigt und führen Sie den Docker-Befehl oben aus.
.
├── 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
Wie wäre es mit dem Vergleich der oben genannten? Es wäre großartig, wenn Sie die Güte eines jeden sehen könnten.
Im nächsten Artikel werde ich auch einen "Hello World!" - Webserver erstellen, der die wichtigsten Frameworks jeder Sprache verwendet.
Der Quellcode ist auch auf Github veröffentlicht.
Recommended Posts