text 프로토콜

Workerman은 text라는 이름의 텍스트 프로토콜을 정의했습니다. 이 프로토콜의 형식은 데이터 패킷 + 줄 바꿈 문자입니다. 즉, 각 데이터 패킷의 끝에 줄 바꿈 문자를 추가하여 패킷의 종료를 표시합니다.

예를 들어 아래의 buffer1과 buffer2 문자열은 text 프로토콜을 따릅니다:

// 텍스트에 줄 바꿈 추가
$buffer1 = 'abcdefghijklmn
';
// PHP의 더블 쿼테이션 안의 \n은 줄 바꿈 문자를 나타냅니다. 예: "\n"
$buffer2 = '{"type":"say", "content":"hello"}'."\n";

// 서버와 소켓 연결 설정
$client = stream_socket_client('tcp://127.0.0.1:5678');
// text 프로토콜로 buffer1 데이터를 전송
fwrite($client, $buffer1);
// text 프로토콜로 buffer2 데이터를 전송
fwrite($client, $buffer2);

text 프로토콜은 매우 간단하고 사용하기 쉽습니다. 만약 개발자가 자신의 프로토콜이 필요하다면, 예를 들어 모바일 앱과 데이터 전송 또는 하드웨어 통신 등, text 프로토콜을 사용하는 것을 고려할 수 있습니다. 개발 및 디버깅이 매우 편리합니다.

text 프로토콜 디버깅

text 프로토콜은 telnet 클라이언트를 사용하여 디버깅할 수 있습니다. 예를 들어 아래의 사례를 참고하세요:

새로운 파일 test.php 생성

require_once __DIR__ . '/Workerman/Autoloader.php';
use Workerman\Worker;

$text_worker = new Worker("text://0.0.0.0:5678");

$text_worker->onMessage =  function($connection, $data)
{
    var_dump($data);
    $connection->send("hello world");
};

Worker::runAll();

php test.php start를 실행하면 다음과 같이 표시됩니다:

php test.php start
Workerman[test.php] start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.2.7          PHP version:5.4.37
------------------------ WORKERS -------------------------------
user          worker        listen                         processes status
root          none          myTextProtocol://0.0.0.0:5678   1         [OK]
----------------------------------------------------------------
Press Ctrl-C to quit. Start success.

다른 터미널을 열고 telnet을 이용해 테스트합니다 (Linux 시스템의 telnet을 사용하는 것이 좋습니다).

로컬 테스트라고 가정합니다,
터미널에서 telnet 127.0.0.1 5678를 입력하고,
그런 다음 hi 입력 후 엔터를 누릅니다.
데이터 hello world\n를 수신하게 됩니다.

telnet 127.0.0.1 5678
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hi
hello world