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