Несколько вопросов, которые должен знать разработчик workerman

1. Ограничения среды Windows

В среде Windows один процесс workerman поддерживает только более 200 подключений.
В среде Windows невозможно использовать параметр count для настройки нескольких процессов.
В среде Windows невозможно использовать команды status, stop, reload, restart и т. д.
В среде Windows невозможно работать в режиме демона, после закрытия окна cmd служба остановится.
В среде Windows невозможно инициализировать несколько слушателей в одном файле.
В среде Linux нет этих ограничений, рекомендуется использовать систему Linux в производственной среде, в качестве среды разработки можно выбрать Windows.

2. Workerman не зависит от Apache или Nginx

Workerman сам по себе уже является контейнером, подобным Apache/Nginx, только если PHP окружение в порядке, workerman может работать.

3. Workerman запускается из командной строки

Способ запуска похож на запуск Apache с использованием команд (обычно веб-пространство не может использовать workerman). Экран запуска похож на следующий

4. Долгосрочные соединения должны иметь сердцебиение

Долгосрочные соединения должны иметь сердцебиение, долгосрочные соединения должны иметь сердцебиение, долгосрочные соединения должны иметь сердцебиение, важное повторено трижды.
Долгосрочные соединения, не общающиеся в течение длительного времени, могут быть очищены узлами маршрутизации и привести к закрытию соединения.
Объяснение сердцебиения workermanОбъяснение сердцебиения gatewayWorker

5. Протокол клиента и сервера обязательно должны соответствовать друг другу для связи

Это очень распространённая проблема для разработчиков. Например, если клиент использует протокол websocket, сервер также должен использовать протокол websocket (сервер new Worker('websocket://0.0.0.0...')) для того, чтобы подключиться и общаться.
Не пытайтесь получить доступ к порту протокола websocket через адресную строку браузера, не пытайтесь использовать протокол websocket для доступа к открытым TCP портам, протоколы обязательно должны соответствовать.

Здесь принцип аналогичен тому, что если вы хотите общаться с британцем, вам нужно использовать английский. Если вы хотите общаться с японцем, вам нужно использовать японский. Здесь язык похож на протокол связи, обе стороны (клиент и сервер) должны использовать одинаковый язык для общения, иначе связь невозможна.

6. Возможные причины неудачного подключения

Часто возникающая проблема при первом использовании workerman — это неудачное подключение клиента к серверу. Причины обычно следующие:

  1. Брандмауэр сервера (включая группы безопасности облачного сервера) блокирует подключения (50% вероятности это причина)
  2. Протоколы клиента и сервера не совпадают (30% вероятность)
  3. Неправильный IP или порт (15% вероятность)
  4. Сервер не запущен

7. Не используйте операторы exit die sleep

Использование операторов exit и die в вашем коде ведет к выходу процесса и отображению ошибки WORKER EXIT UNEXPECTED. Конечно, процесс будет немедленно перезапущен, и новый процесс продолжит обслуживание. Если нужно вернуть значение, можно использовать return. Оператор sleep заставляет процесс "спать", в течение этого времени никакие задачи не будут выполняться, фреймворк также перестанет работать, что приведет к тому, что все запросы клиентов данного процесса не будут обработаны.

8. Не используйте функцию pcntl_fork

pcntl_fork используется для динамического создания новых процессов. Если вы используете pcntl_fork в бизнес-коде, это может привести к возникновению невызываемых "сиротских" процессов, что вызовет аномалии в бизнесе. Использование pcntl_fork в бизнесе также повлияет на обработку соединений, сообщений, закрытие соединений, таймеров и других событий, что может привести к непредсказуемым аномалиям.

9. В бизнес-коде не должно быть бесконечных циклов

В бизнес-коде не должно быть бесконечных циклов, иначе управление не сможет вернуться во фреймворк workerman, что не позволит принимать и обрабатывать сообщения других клиентов.

10. Изменение кода требует перезапуска

Workerman — это фреймворк с постоянным хранением в памяти, поэтому, чтобы увидеть эффект нового кода, необходимо перезапустить workerman.

11. Для приложений с долгосрочным соединением рекомендуется использовать фреймворк GatewayWorker

Многие разработчики используют workerman для разработки приложений с долгосрочными соединениями, например для мгновенных сообщений, Интернета вещей и т. д., поэтому для приложений с долгосрочными соединениями рекомендуется использовать фреймворк GatewayWorker, который специально разработан на основе workerman для упрощения создания бэкэнда приложений с долгосрочными соединениями.

12. Поддержка более высокой конкуренции
Если количество параллельных подключений бизнеса превышает 1000 одновременно, обязательно оптимизируйте ядро Linux и установите расширение event.