간단한 개발 예제

설치

workerman 설치
빈 디렉토리에서 실행
composer require workerman/workerman

예제 1, HTTP 프로토콜을 사용하여 웹 서비스 제공

start.php 파일 생성

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

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

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

// 브라우저에서 전송된 데이터 수신 시 hello world를 브라우저에 응답
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
    // 브라우저에 hello world 전송
    $connection->send('hello world');
};

// worker 실행
Worker::runAll();

명령줄 실행 (윈도우 사용자 cmd 명령줄 사용 시 동일)

php start.php start

테스트

서버의 IP가 127.0.0.1이라고 가정

브라우저에서 URL http://127.0.0.1:2345에 접근

주의:

  1. 접근할 수 없는 경우 클라이언트 연결 실패 원인 섹션을 참조하여 문제를 해결하십시오.

  2. 서버가 http 프로토콜이므로 http 프로토콜만 통신할 수 있으며, webSocket 등의 다른 프로토콜과는 직접적으로 통신할 수 없습니다.

예제 2, WebSocket 프로토콜을 사용하여 서비스 제공

ws_test.php 파일 생성

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

// 주의: 여기서는 이전 예제와 다르게 websocket 프로토콜 사용
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// 4개의 프로세스를 시작하여 외부 서비스 제공
$ws_worker->count = 4;

// 클라이언트가 보낸 데이터를 수신 시 hello $data를 클라이언트에 응답
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
    // 클라이언트에 hello $data 전송
    $connection->send('hello ' . $data);
};

// worker 실행
Worker::runAll();

명령줄 실행

php ws_test.php start

테스트

Chrome 브라우저를 열고 F12를 눌러 디버그 콘솔을 열고, Console란에 입력(아니면 아래 코드를 HTML 페이지에 넣고 JS로 실행)

// 서버의 IP가 127.0.0.1이라고 가정
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
    alert("연결 성공");
    ws.send('tom');
    alert("서버에 문자열 전송: tom");
};
ws.onmessage = function(e) {
    alert("서버에서 메시지 수신됨: " + e.data);
};

주의:

  1. 접근할 수 없는 경우 매뉴얼 FAQ - 연결 실패 섹션을 참조하여 문제를 해결하십시오.

  2. 서버가 websocket 프로토콜이므로 websocket 프로토콜만 통신할 수 있으며, http 등의 다른 프로토콜과는 직접적으로 통신할 수 없습니다.

예제 3, TCP로 데이터 전송

tcp_test.php 파일 생성

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

// 2347 포트를 수신하고, 어떤 애플리케이션 레이어 프로토콜도 사용하지 않는 Worker 생성
$tcp_worker = new Worker("tcp://0.0.0.0:2347");

// 4개의 프로세스를 시작하여 외부 서비스 제공
$tcp_worker->count = 4;

// 클라이언트가 데이터를 보냈을 때
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
    // 클라이언트에 hello $data 전송
    $connection->send('hello ' . $data);
};

// worker 실행
Worker::runAll();

명령줄 실행

php tcp_test.php start

테스트: 명령줄 실행
(다음은 리눅스 명령 프롬프트의 효과이며, 윈도우와 효과가 다를 수 있음)

telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^>'.
tom
hello tom

주의:

  1. 접근할 수 없는 경우 매뉴얼 FAQ - 연결 실패 섹션을 참조하여 문제를 해결하십시오.

  2. 서버가 맨 클래스 tcp 프로토콜이므로 webSocket, http 등의 다른 프로토콜과는 직접적으로 통신할 수 없습니다.