간단한 개발 예제
설치
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에 접근
주의:
-
접근할 수 없는 경우 클라이언트 연결 실패 원인 섹션을 참조하여 문제를 해결하십시오.
-
서버가 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);
};
주의:
-
접근할 수 없는 경우 매뉴얼 FAQ - 연결 실패 섹션을 참조하여 문제를 해결하십시오.
-
서버가 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
주의:
-
접근할 수 없는 경우 매뉴얼 FAQ - 연결 실패 섹션을 참조하여 문제를 해결하십시오.
-
서버가 맨 클래스 tcp 프로토콜이므로 webSocket, http 등의 다른 프로토콜과는 직접적으로 통신할 수 없습니다.