-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
D repin/hw 6 #1203
base: DRepin/main
Are you sure you want to change the base?
D repin/hw 6 #1203
Conversation
Nginx PHP-FPM Mysql Redis Memcache Composer
mysql/conf/my.cnf
Outdated
@@ -0,0 +1,16 @@ | |||
[mysqld] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Совет: не нужно добавлять те файлы которые не нужны для работы ДЗ.
www/src/Singurix/Chat/Client.php
Outdated
while ($clientStarted) { | ||
$consoleMessage = fgets(STDIN); | ||
if (trim($consoleMessage) == 'stop') { | ||
$clientStarted = false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут можно сделать break
и тогда можно избавится от переменной $clientStarted
и от else
www/src/Singurix/Chat/Server.php
Outdated
|
||
private function readMessage($sock): void | ||
{ | ||
$socketMsg = false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Немного запутанный код. Будет проще если:
- В цикле ждать соединения
- Как только получили соединение в другом цикле обрабатывать сообщения от клиента.
www/src/Singurix/Chat/Client.php
Outdated
public function start(): void | ||
{ | ||
$clientStarted = true; | ||
$sock = (new SocketChat())->isServerRun()->create()->connect(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мы создаём инстанс друго-го класса. Лучше его создать где-то во вне и сюда инъектить как зависимость.
www/src/Singurix/Chat/Server.php
Outdated
*/ | ||
public function start(): void | ||
{ | ||
$sock = (new SocketChat()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Мы создаём инстанс друго-го класса. Лучше его создать где-то во вне и сюда инъектить как зависимость.
www/src/Singurix/Chat/Client.php
Outdated
if (trim($consoleMessage) == 'stop') { | ||
$clientStarted = false; | ||
} else { | ||
socket_write($sock->socket, $consoleMessage, strlen($consoleMessage)); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут у нас протекла абстракция. У нас есть класс который абстрагирует нас от некоторых низкоуровневых вызовов методов сокета. Но не от всех, тут мы всё равно их используем. Стоит их перенести в класс SocketChat. Данное замечание валидно для всех мест.
www/src/Singurix/Chat/SocketChat.php
Outdated
*/ | ||
public function __construct() | ||
{ | ||
$configFile = '/app/config.ini'; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лучше будет отделить конфигурацию в отдельный класс и инкапсулировать всю логику там. И сюда конфиг инъектить как зависимость.
www/src/Singurix/Chat/Config.php
Outdated
{ | ||
return $this->config['socket']['file']; | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нужно поправить все замечания линтера.
www/src/Singurix/Chat/Server.php
Outdated
->create() | ||
->bind() | ||
->listen(); | ||
socket_set_nonblock($sock->socket); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это надо делать внутри класса который работает с сокетом. Основной смысл создания класса - это инкапсуляция данных и методов работы с ними и абстрагирование пользователей от того как это работает. У Вас же получается это нарушено, пользователь, зачем-то знает как устроен класс. Чтобы понять как надо сделать, вместо конкретного класса SocketChat создайте интерфейс и везде используйте его вместо конкретной реализации.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
вместо конкретного класса SocketChat создайте интерфейс и везде используйте его вместо конкретной реализации
Вот такой подход не понял, можно поподробнее информацию или где-то почитать?
www/src/Singurix/Chat/Server.php
Outdated
private function readMessage($sock): void | ||
{ | ||
do { | ||
if ($socketMsg = socket_accept($sock->socket)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут, как и в других участках кода, протекает абстракция. Чтобы исправить, сделайте свойство socket внутри SocketChat приватным и перепишите код.
No description provided.