Skip to content

Commit cea4a9e

Browse files
committed
Update
1 parent ccb3e08 commit cea4a9e

File tree

3 files changed

+51
-12
lines changed

3 files changed

+51
-12
lines changed

src/pages/features.mdx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,20 @@ Localzet Server под HHVM демонстрирует увеличение пр
6767
### 15. Поддержка прослушивания нескольких портов
6868

6969
### 16. Поддержка перенаправления стандартных ввода-вывода
70+
71+
### 17. Улучшенная типизация и безопасность
72+
73+
Localzet Server постоянно улучшается для обеспечения максимальной безопасности и надежности:
74+
75+
- **Строгая типизация** - все методы имеют явные типы возвращаемых значений и параметров
76+
- **Валидация входных данных** - все входные данные проверяются перед использованием
77+
- **Безопасная обработка конфигурации** - устранены небезопасные практики (например, использование `extract()`)
78+
- **Улучшенная обработка ошибок** - корректная обработка всех граничных случаев
79+
- **Константы вместо магических чисел** - улучшенная читаемость и поддерживаемость кода
80+
81+
<Button
82+
href="/changelog"
83+
variant="text"
84+
arrow="right"
85+
children="Подробнее о технических улучшениях"
86+
/>

src/pages/must-read.mdx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,18 @@ Localzet Server сам по себе является контейнером, а
3737
Оператор `sleep` приостанавливает выполнение всего процесса, во время которого не выполняется никаких бизнес-операций, и работа фреймворка также останавливается,
3838
что приводит к тому, что все запросы клиентов этого процесса остаются без обработки!
3939

40+
**Важно:** Для приостановки выполнения используйте `Timer::sleep()` вместо `sleep()`, который работает асинхронно и не блокирует обработку других запросов:
41+
42+
```php
43+
use localzet\Timer;
44+
45+
// Правильно - асинхронная задержка
46+
Timer::sleep(1.0); // Приостановка на 1 секунду без блокировки процесса
47+
48+
// Неправильно - блокирует весь процесс
49+
sleep(1);
50+
```
51+
4052
**6. Не используйте функцию `pcntl_fork`**
4153

4254
Функция `pcntl_fork` используется для динамического создания новых процессов.

src/pages/protocols/custom.mdx

Lines changed: 22 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,15 @@ class SuperJSON
4040
* Если можно получить длину пакета в $recv_buffer, возвращается длина всего пакета
4141
* В противном случае возвращается 0, что означает, что необходимо дождаться дополнительных данных.
4242
* Если возникает ошибка в протоколе, можно вернуть false, что приведет к разрыву соединения с текущим клиентом
43-
* @param string $recv_buffer
44-
* @return int
43+
*
44+
* @param string $recv_buffer Буфер полученных данных
45+
* @param \localzet\Server\Connection\ConnectionInterface $connection Соединение с клиентом
46+
* @return int|false Длина пакета, 0 если данных недостаточно, false при ошибке
4547
*/
46-
public static function input($recv_buffer)
48+
public static function input(string $recv_buffer, \localzet\Server\Connection\ConnectionInterface $connection): int|false
4749
{
4850
// Получение позиции символа переноса строки "\n"
49-
$pos = strpos($buffer, "\n");
51+
$pos = strpos($recv_buffer, "\n");
5052

5153
// Если его нет - невозможно получить длину пакета, вернуть 0 и ожидать дополнительных данных
5254
if($pos === false)
@@ -60,25 +62,33 @@ class SuperJSON
6062

6163
/**
6264
* Упаковка, автоматически вызывается при отправке данных клиенту
63-
* @param string $buffer
64-
* @return string
65+
*
66+
* @param mixed $data Данные для отправки
67+
* @param \localzet\Server\Connection\ConnectionInterface $connection Соединение с клиентом
68+
* @return string Закодированные данные для отправки
6569
*/
66-
public static function encode($buffer)
70+
public static function encode(mixed $data, \localzet\Server\Connection\ConnectionInterface $connection): string
6771
{
6872
// Формирование JSON и добавление символа переноса строки в качестве пометки окончания запроса
69-
return json_encode($buffer) . "\n";
73+
return json_encode($data, JSON_THROW_ON_ERROR) . "\n";
7074
}
7175

7276
/**
7377
* Разбор, автоматически вызывается, когда количество полученных байтов равно возвращенному значению input (значение больше 0)
7478
* и передается как параметр $data в обратный вызов onMessage
75-
* @param string $buffer
76-
* @return string
79+
*
80+
* @param string $buffer Буфер данных для декодирования
81+
* @param \localzet\Server\Connection\ConnectionInterface $connection Соединение с клиентом
82+
* @return mixed Декодированные данные
7783
*/
78-
public static function decode($buffer)
84+
public static function decode(string $buffer, \localzet\Server\Connection\ConnectionInterface $connection): mixed
7985
{
8086
// Удаление символа переноса строки и превращение в массив
81-
return json_decode(trim($buffer), true);
87+
$decoded = json_decode(trim($buffer), true);
88+
if (json_last_error() !== JSON_ERROR_NONE) {
89+
throw new \RuntimeException('Ошибка декодирования JSON: ' . json_last_error_msg());
90+
}
91+
return $decoded;
8292
}
8393
}
8494
```

0 commit comments

Comments
 (0)