[DOCKER] Un mémo qui conteneurise l'application de chat simple de Node.js + socket.io

Contexte

Un mémo lorsque l'application de chat simple de Node.js + socket.io est conteneurisée

Lien Collection

Make Node.js Web Application Docker

Un document qui crée un simple serveur Node.js qui renvoie Hello World et en fait un conteneur. J'ai pu retrouver la mémoire de Node.js, que j'ai presque oublié.

Socket.io#Get Started Vous pouvez créer une application simple en utilisant socket.io

Exemple de code

package.json


{
  "name": "docker_web_app",
  "version": "1.0.0",
  "description": "Node.js on Docker",
  "author": "shogo suzuki",
  "main": "socket_server.ts",
  "scripts": {
    "start": "node socket_server.js"
  },
  "dependencies": {
    "express": "*",
    "socket.io": "^2.3.0"
  }
}

Dockerfile



FROM node:14.13
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "node", "socket_server.ts" ]

index.html



<!doctype html>
<html>
  <head>
    <title>Socket.IO chat</title>
    <style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: 0.5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
    </style>
  </head>
  <script src="/socket.io/socket.io.js"></script>
  <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
  <script>
    $(function () {
      var socket = io();
      $('form').submit(function(e){
        e.preventDefault(); // prevents page reloading
        socket.emit('chat message', $('#m').val());
        $('#m').val('');
        return false;
      });
      socket.on('chat message', function(msg){
        $('#messages').append($('<li>').text(msg));
      });
    });
  </script>
  <body>
    <ul id="messages"></ul>
    <form action="">
      <input id="m" autocomplete="off" /><button>Send</button>
    </form>
  </body>
</html>

socket_server.ts



var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
  console.log('a user connected');
  socket.on('chat message', (msg) => {
    io.emit('chat message', msg);
  });
});

http.listen(3000, () => {
  console.log('listening on *:3000');
});

Courir

docker build -t socket-example:1.0 .
docker run -p 3000:3000 -d socket-example:1.0

Recommended Posts

Un mémo qui conteneurise l'application de chat simple de Node.js + socket.io
Vérifier le fonctionnement de deux rôles avec une application de chat
Un mémo sobrement accro à la demande de multipart / form-data
Un exemple simple de servlet qui affiche le japonais
[Solution] Un mémo que j'ai eu du mal car le format de sinatra-validation a changé.
Un mémo du programme que vous pouvez réaliser que la probabilité de lancer des dés est d'environ 1/6
[Mémo de travail de l'application personnelle] Déplacer l'emplacement du bouton de suivi
Un programme qui compte le nombre de mots dans une liste
Une histoire qui m'a fait regretter quand une "NotReadablePropertyException" s'est produite pendant le développement de l'application Spring Boot.
Une histoire qui a eu du mal avec l'introduction de Web Apple Pay
Créons une application TODO en Java 5 Changer l'affichage de TODO
Faisons un custom_cop qui souligne le tremblement du nom
Ceci et cela de JDK
Un mémorandum du problème FizzBuzz
Un mémo qui a touché Spring Boot
Cas où les utilisateurs sont déconnectés lors de la modification d'une application (rails)
Un mémo lorsque vous souhaitez effacer la partie horaire de l'agenda
Une collection de phrases qui impressionne le "sentiment différent" de Java et de JavaScript
Application Android: expliquons le mécanisme de transition d'écran avec un code simple
Exemple de programme qui renvoie la valeur de hachage d'un fichier en Java
Déployer une application Node.js sur une instance ECS à l'aide du Cloud Toolkit