개발 규약

애플리케이션 디렉토리

애플리케이션 디렉토리는 임의의 위치에 둘 수 있습니다.

진입 파일

nginx+PHP-FPM 하의 PHP 애플리케이션과 마찬가지로, Workerman의 애플리케이션도 하나의 진입 파일이 필요합니다. 진입 파일 이름에 대한 요구사항은 없으며, 이 진입 파일은 PHP CLI 방식으로 실행됩니다.

진입 파일에는 리스닝 프로세스를 생성하는 관련 코드가 포함됩니다. 예를 들어, 아래는 Worker를 기반으로 한 코드 조각입니다.

test.php

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

// 2345 포트를 리스닝하는 Worker 생성, http 프로토콜로 통신
$http_worker = new Worker("http://0.0.0.0:2345");

// 외부에 서비스를 제공하기 위해 4개의 프로세스 시작
$http_worker->count = 4;

// 브라우저가 전송한 데이터를 수신했을 때 브라우저에 hello world를 응답
$http_worker->onMessage = function(TcpConnection $connection, $data)
{
    // 브라우저에 hello world 전송
    $connection->send('hello world');
};

Worker::runAll();

Workerman 내 코드 규약

  1. 클래스는 첫 글자를 대문자로 하여 카멜 케이스로 명명하며, 클래스 파일 이름은 파일 내부의 클래스 이름과 동일해야 합니다. 이를 통해 자동 로드가 가능합니다. 예를 들어:

    class UserInfo
    {
    ...
  2. 네임스페이스를 사용하며, 네임스페이스 이름은 디렉토리 경로에 해당하고, 개발자의 프로젝트 루트 디렉토리를 기준으로 합니다.

예를 들어 프로젝트 MyApp/에서, 클래스 파일 MyApp/MyClass.php는 프로젝트 루트 디렉토리에 있기 때문에 네임스페이스를 생략합니다. 클래스 파일 MyApp/Protocols/MyProtocol.php는 MyProtocol.php가 MyApp 프로젝트의 Protocols 디렉토리 아래에 있기 때문에 네임스페이스 namespace Protocols;를 추가해야 합니다. 아래와 같이 작성합니다:

namespace Protocols;
class MyProtocol
{
....
  1. 일반 함수 및 변수 이름은 소문자와 언더스코어(_) 방식을 사용합니다. 예를 들어:

    $connection_list = array();
    function get_connection_list()
    {
    ....
  2. 클래스 멤버 및 클래스의 메서드는 첫 글자를 소문자로 하여 카멜 케이스 형식을 사용합니다. 예를 들어:

    public $connectionList;
    public function getConnectionList();
  3. 함수 및 클래스의 매개변수는 소문자와 언더스코어(_) 방식을 사용합니다.

    function get_connection_list($one_param, $tow_param)
    {
    ....