Skip to content

eustatos/php-socket.io

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

11 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Socket.io, redis ΠΈ php

Для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… сСрвСром Π½Π° php ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ:

  1. Π‘Π΅Ρ€Π²Π΅Ρ€ php ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠ°Π½Π°Π» redis.
  2. Π‘Π΅Ρ€Π²Π΅Ρ€ node подписываСтся Π½Π° события Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΠΊΠ°Π½Π°Π»Π΅ redis ΠΈ ΠΏΡ€ΠΈ наступлСнии события поступлСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅Ρ‚ эти Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΠΆΠ΅ Π² socket.io
  3. ΠšΠ»ΠΈΠ΅Π½Ρ‚ подписываСтся Π½Π° сообщСния socket.io ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΈΡ… ΠΏΡ€ΠΈ поступлСнии

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ docker-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π—Π΄Π΅ΡΡŒ я Π±ΡƒΠ΄Ρƒ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ малСнькими шагами. Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ связка nginx ΠΈ php-fpm ΠΈ Π½Π°Ρ‡Π½Ρƒ я с настройки nginx.

Настройка nginx

НачнСм ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ docker-compose.yml Π² ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ нашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

# docker-compose.yml
version: '3'
services:
  nginx:
    image: nginx
    ports:
      - 4400:80

ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅: http://localhost:4400 ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ стандартноС привСтствиС nginx. Π’Π΅ΠΏΠ΅Ρ€ΡŒ настроим, Ρ‡Ρ‚ΠΎΠ±Ρ‹ nginx ΠΎΡ‚Π΄Π°Π²Π°Π» статичСскоС содСрТимоС ΠΏΠ°ΠΏΠΊΠΈ ./www/public. Π‘Π½Π°Ρ‡Π°Π»Π° создадим ΠΏΠ°ΠΏΠΊΠΈ

mkdir -pv www/public

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» ./www/pulbic/index.html

<!-- www/public/index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ nginx - nginx/conf/custom.conf. Для Π½Π°Ρ‡Π°Π»Π° скопируСм стандартный /etc/nginx/conf.d/default.conf. ИзмСним docker-compose.yml

 services:
   nginx:
     image: nginx
+    volumes:
+      - ./nginx/conf/custom.conf:/etc/nginx/conf.d/default.conf
     ports:
       - 4400:80

ΠŸΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ nginx

docker-compose up -d

И вновь наблюдаСм ΠΏΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎ адрСсу http://localhost:4400 стандартноС привСтствиС nginx. ВнСсСм измСнСния docker-compose.yml

     image: nginx
     volumes:
       - ./nginx/conf/custom.conf:/etc/nginx/conf.d/default.conf
+      - ./www:/www
     ports:
       - 4400:80

nginx/conf/custom.conf

 #access_log  /var/log/nginx/host.access.log  main;

   location / {
-    root   /usr/share/nginx/html;
+    root   /www/public;
     index  index.html index.htm;
   }

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎ адрСсу http://localhost:4400 отобраТаСтся 'Hello World!' ΠΈΠ· Ρ„Π°ΠΉΠ»Π° www/public/index.html. ΠŸΡ€ΠΎΡ€Ρ‹Π²ΠΎΠΌ это Π½Π°Π·Π²Π°Ρ‚ΡŒ слоТно, Π½ΠΎ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ двигаСмся Π² Π½ΡƒΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.

Настройка php

НачнСм с создания ΠΏΠ°ΠΏΠΎΠΊ для хранСния Ρ„Π°ΠΉΠ»ΠΎΠ² настроСк ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°.

mkdir -pv php/conf

Π”Π°Π»Π΅Π΅ создадим php/Dockerfile

FROM php:7-fpm

RUN apt-get -qq update && apt-get -qq install \
  curl \
  > /dev/null

ENV PHPREDIS_VERSION 3.0.0

RUN mkdir -p /usr/src/php/ext/redis \
    && curl -L https://github.com/phpredis/phpredis/archive/$PHPREDIS_VERSION.tar.gz | tar xvz -C /usr/src/php/ext/redis --strip 1 \
    && echo 'redis' >> /usr/src/php-available-exts \
    && docker-php-ext-install redis

И внСсСм измСнСния в docker-compose.yml

       - ./www:/www
     ports:
       - 4400:80
+  php:
+    build: ./php
+    volumes:
+      - ./www:/www

Π’Π°ΠΊΠΆΠ΅ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ внСсти измСнСния Π² настройки nginx, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .php ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈΡΡŒ php-fpm. ИзмСним Ρ„Π°ΠΉΠ» nginx/conf/custom.conf ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
-#location ~ \.php$ {
-#    root           html;
-#    fastcgi_pass   127.0.0.1:9000;
-#    fastcgi_index  index.php;
-#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
-#    include        fastcgi_params;
-#}
+location ~ \.php$ {
+    root          /www;
+    fastcgi_pass   php:9000;
+    fastcgi_index  index.php;
+    fastcgi_param REQUEST_METHOD  $request_method;
+    fastcgi_param CONTENT_TYPE    $content_type;
+    fastcgi_param CONTENT_LENGTH  $content_length;
+    fastcgi_param  SCRIPT_FILENAME  /www/public/$fastcgi_script_name;
+    include        fastcgi_params;
+}

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» www/public/info.php со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ

<?php
phpinfo();

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΠΌ наш ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

docker-compose restart

И Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎ адрСсу http://localhost:4400/info.php отобраТаСтся информация ΠΎ настройках php. Π•Ρ‰Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ поэкспСримСнтируСм ΠΈ создадим Ρ„Π°ΠΉΠ» www/Test.php

<?php
class Test
{
  public function prn()
  {
    echo 'Success';
  }
}

А содСрТимоС Ρ„Π°ΠΉΠ»Π° www/public/info.php Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

<?php
require_once(
 implode(
   DIRECTORY_SEPARATOR,
   [
     dirname(__DIR__),
     'Test.php'
   ]
 )
);

$test = new Test();
$test->prn();

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎ адрСсу http://localhost:4400/info.php отобраТаСтся 'success', Π° это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚,Ρ‡Ρ‚ΠΎ php-fpm доступны скрипты располоТСнныС Π² ΠΏΠ°ΠΏΠΊΠ΅ www, Π° Ρ‡Π΅Ρ€Π΅Π· Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ ΠΎΠ½ΠΈ нСдоступны. Π’.Π΅. ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒΡΡ Π² Π½ΡƒΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ.

Настройка redis

Π­Ρ‚ΠΎ, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, самая короткая Ρ‡Π°ΡΡ‚ΡŒ. Redis Π² этом ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн ΠΈΠ· внСшнСй сСти, Π½ΠΎ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ настроим. Для этого создадим Ρ„Π°ΠΉΠ» .env

REDIS_PASSWORD=eustatos

ВнСсСм измСнСния Π² docker-compose.yml

     build: ./php
     volumes:
       - ./www:/www
+  redis:
+    image: redis
+    command: ["sh", "-c", "exec redis-server --requirepass \"${REDIS_PASSWORD}\""]

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΊ redis ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ„Π°ΠΉΠ» www/public/info.php

<?php
$redis = new Redis();
// ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ сСрвСру redis
$redis->connect(
  'redis',
  6379
);
// авторизуСмся. 'eustatos' - ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ `.env`
$redis->auth('eustatos');
// ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ сообщСниС Π² ΠΊΠ°Π½Π°Π»Π΅ 'eustatos'
$redis->publish(
  'eustatos',
  json_encode([
    'test' => 'success'
  ])
);
// Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС
$redis->close();

РСстартуСм ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

docker-compose restart

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΠΌΡΡ ΠΊ сСрвСру redis

docker-compose exec redis bash

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС. 'eustatos' - ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρ€Π°Π½Π΅Π΅ Π·Π°Π΄Π°Π»ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ .env

# redis-cli -a eustatos

ПодпишСмся Π½Π° ΠΊΠ°Π½Π°Π» 'eustatos' (Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ, Π΄ΠΎΠ»Π½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ°Π½Π°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π² Ρ„Π°ΠΉΠ»Π΅ www/public/info.php)

> subscribe eustatos

ПослС всСх этих ΠΏΡ€ΠΈΠ³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΠΌ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎ адрСсу http://localhost:4400/info.php ΠΈ наблюдаСм, ΠΊΠ°ΠΊ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, Π³Π΄Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π»ΠΈΡΡŒ ΠΊ redis ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ строки:

1) "message"
2) "eustatos"
3) "{\"test\":\"success\"}"

Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ стали Π΅Ρ‰Π΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ нашСй Ρ†Π΅Π»ΠΈ.

Настройка socket.io

Π‘ΠΎΠ·Π°Π΄ΠΈΠΌ ΠΏΠ°ΠΏΠΊΡƒ, Π³Π΄Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ нашСго socket.io сСрвСра

mkdir socket

ВнСсСм измСнСния Π² docker-compose.yml

   redis:
     image: redis
     command: ["sh", "-c", "exec redis-server --requirepass \"${REDIS_PASSWORD}\""]
+  socket:
+    image: node
+    user: "node"
+    volumes:
+      - ./socket:/home/node/app
+    ports:
+      - 5000:5000
+    working_dir: /home/node/app
+    command: "npm start"

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ Π² ΠΏΠ°ΠΏΠΊΡƒ socket

cd socket

Установим Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹

npm init -y
npm i -S socket.io redis express

ПослС этого Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Ρ„Π°ΠΉΠ» socket/package.json строки

{
  "name": "socket-php-example",
  "version": "1.0.0",
  "main": "index.js",
  "author": "eustatos <astashkinav@gmail.com>",
  "license": "MIT",
+  "scripts": {
+    "start": "node index.js"
+  },
  "dependencies": {
    "express": "^4.16.3",
    "redis": "^2.8.0",
    "socket.io": "^2.1.0"
  }
}

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» socket/index.js

const express = require('express');
const app = express();
const http = require('http').Server(app);

const port = process.env.PORT || 5000;

app.get(
  '/',
  function(req, res, next) {
    res.send('success');
  }
);

http.listen(
  port,
  function() {
    console.log('Listen at ' + port);
  }
);

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΠΌ наш ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

docker-compose restart

ПослС этого Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ ΠΏΠΎ адрСсу http://localhost:5000 отобраТаСтся "success". Π—Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ Π΅Ρ‰Π΅ Ρ‡ΡƒΡ‚ΡŒ Π±Π»ΠΈΠΆΠ΅ ΠΊ нашСй Ρ†Π΅Π»ΠΈ. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ совсСм Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ. ИзмСним Ρ„Π°ΠΉΠ» socket/index.js

const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);

// ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡΡ ΠΊ redis
const subscriber = require('redis').createClient({
  host: 'redis',
  port: 6379,
  password: 'eustatos'
});

// подписываСмся Π½Π° измСнСния Π² ΠΊΠ°Π½Π°Π»Π°Ρ… redis
subscriber.on('message', function(channel, message) {
  // пСрСсылаСм сообщСниС ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° redis Π² ΠΊΠΎΠΌΠ½Π°Ρ‚Ρƒ socket.io
  io.emit('eustatosRoom', message);
});

// ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ соСдинСниС socket.io
io.on('connection', function(socket){
  // подписываСмся Π½Π° ΠΊΠ°Π½Π°Π» redis 'eustatos' Π² callback
  subscriber.subscribe('eustatos');
});

const port = process.env.PORT || 5000;

http.listen(
  port,
  function() {
    console.log('Listen at ' + port);
  }
);

На этом настройка ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° socket.io Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π°.

Настройка клиСнтского прилоТСния

ΠšΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² любом ΠΈΠ· Π½Π°ΡˆΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π½ΠΎ для чистоты экспСримСнта Ρ€Π°Π·Π²Π΅Ρ€Π½Π΅ΠΌ Π΅Π³ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π€Π°ΠΉΠ»Ρ‹ клиСнтского прилоТСния размСстим Π² ΠΏΠ°ΠΏΠΊΠ΅ client

mkdir client

Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Ρ„Π°ΠΉΠ» client/index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>
  <body>
      <script
         src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
      <script>
const socket = io(
  window.location.protocol + '//' + window.location.hostname + ':5000'
);
        socket.on(
          'eustatosRoom',
          function(message) {
            console.log(JSON.parse(message));
          }
        );
      </script>
  </body>
</html>

ИзмСним docker-compose.yml

     ports:
       - 5000:5000
     command: "npm start"
+  client:
+    image: nginx
+    volumes:
+      - ./client:/usr/share/nginx/html
+    ports:
+      - 8000:80

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΠΌ наш ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€

docker-compose restart

ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ сначала Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ http://localhost:8000. Для дСмонстрации Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Π½Π°ΡˆΠΈΡ… Ρ‚Ρ€ΡƒΠ΄ΠΎΠ² Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ панСль Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. Пока Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ отобраТаСтся. ΠžΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΈΠ»ΠΈ ΠΎΠΊΠ½Π΅ адрСс http://localhost:5000 ΠΈ посмотрСм Π½Π° Π² консоль нашСго ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. ΠœΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ:

{test: "success"}

А это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ наш сСрвСр Π±Π»Π°Π³ΠΎΠΏΠΎΠ»ΡƒΡ‡Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π» клиСнтскому ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Π΅.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published