펄 오브젝트 환경
Perl Object Environment![]() | 이 글에는 여러 가지 문제가 있다. 이 문제를 개선하거나 대화 페이지에서 토의하십시오. (이러한 템플릿 메시지를 제거하는 방법 및 시기 알아보기)
|
- 마하 변종은 마하 커널을 참조하십시오.
Perl Object Environment 또는 POE는 Rocco Caputo 등이 Perl 프로그래밍 언어로 작성한 Perl 모듈의 라이브러리다.
CPAN에서:
- "POE는 원래 지속적인 오브젝트 서버와 런타임 환경의 핵심으로 개발되었다. "이벤트, TK, Gtk 툴킷 등 다른 이벤트 루프를 포괄하고 일관된 인터페이스를 제공하는 등 범용 멀티태스킹과 네트워킹 프레임워크로 진화했다."
POE 아키텍처: 추상화 계층
POE, Perl Object Environment는 작은 모듈식 운영 체제로 생각할 수 있다. 하나 이상의 POE 프로그램 또는 인스턴스를 동시에 실행할 수 있으며 일반적으로 협력 멀티태스킹에 적합하다. POE 패키지는 개방된 CPAN 스타일 컨벤션에서 POE의 향후 개발을 안내하는 네임스페이스와 추상화로 구성된다.
이벤트 계층
비공식 아키텍처는 아래에 커널이 있는 일련의 계층들로 구성된다. 이 작은 커널은 실행 중인 각 POE 인스턴스의 주 루프로 작동하는 이벤트 계층을 나타낸다. 첫 번째 통화는 "이벤트 발송자" - POE::커널.
POE::커널 네임스페이스에는 커널 자체에 연결된 일련의 기능이 포함되어 있다. 이러한 루프 추상화는 POE의 표준화된 이벤트 루프 브리지 인터페이스인 POE::루프 이후에 설계된다. 이러한 것들은 런타임 서비스와 프로세스 간 통신을 위한 희박한 시설을 제공하기 위해 필요에 따라 혼합되고 일치될 수 있다. 기본 기능은 POE::루프::이벤트, POE::루프:Poll 및 POE::루프:선택하십시오. 또한 POE:루프::Tk 및 POE::루프:외부 환경의 다른 루프 브리지에 후크를 제공하는 Gtk 그것이 충분하지 않다면, 진입점:루프 커널 추상화는 재사용 가능한 신호 콜백, 시간 또는 알람 콜백, 파일 핸들 활동 콜백과 이벤트 루프의 초기화, 실행 및 종료와 같은 관리 기능을 제공한다.
또한 보다 높은 수준의 포장 프레임워크 - POE::Macro와 이를 테스트하기 위한 디버깅 유틸리티(POE:::전처리기. 이 프레임워크는 POE::Macro:::UseBytes.
- 참고: Perl 전통이 요구하는 바와 같이, POE 또한 움직이는 목표물이다.
항상 CPAN을 확인하여 커뮤니티가 아카이브에 어떤 새로운 기능을 부여했는지 확인하십시오. (...그리고 Larry당 "여러 가지 방법이 있다"라는 Perl의 좌우명을 기억하십시오.)
실행 중인 커널은 POE가 지배하는 또 다른 추상화 집합으로 구성된 원시 유한 상태 기계를 통해 작동한다.세션 아키텍처. 진입점:세션은 거의 대수롭지 않게 기능, 클래스 방법 및/또는 그것들을 처리하는 객체 방법에 대한 이벤트의 맵으로 정의된다. POE:세션 개체에는 힙이라고 하는 모든 이벤트 핸들러가 공유하는 저장소 공간도 포함되어 있다. 당신이 그것들을 잘라내는 모든 방법은 확실히 식별되고 명확하게 정의된다.
보다 특징적인 이벤트 핸들러는 POE:POE라고 하는 세션 하위 클래스:NFA - 이벤트 기반 비결정론적 유한 자동화(스마트한 유한 상태 기계) 이 이벤트 핸들러는 이벤트, 폴링, 사용자 선택 또는 기타 외부 이벤트가 요구하는 대로 엄격하게 정의된 상태에서 다른 상태로 이동한다. 이 상태 기계는 실행 경로를 따라 비교적 비공식적인 진입점보다 훨씬 엄격한 추적을 가능하게 하는 광범위한 일반 이벤트 기반 스레드를 캡슐화하는 작용을 한다.세션
I/O 계층
커널의 다음 요구 사항은 휠이라는 단일 I/O 계층에 존재하는 입력-출력 핸들러에 대한 것이다. 휠은 동작을 시작하고, 결과로 발생하는 로우 레벨 이벤트를 처리하며, 휠을 사용하는 세션에 대해 더 높은 레벨의 이벤트를 생성한다. 세션 및 루프와 같은 휠은 균일한 추상화 집합에서 제작됨 - POE:바퀴 - 커널 맨 위에 있는 바퀴. POE의 기본 분포에는 7개의 고도로 전문화되고 잘 정의된 휠이 있다.
- POE:휠::실행 - 파이프(), 포크() 및 가끔 실행()을 사용하여 하위 프로세스를 만들고 상호 작용한다. 상호 작용은 어린이의 표준 입력과 출력을 통해 이루어진다.
- POE:휠::SocketFactory - 클라이언트 및 서버 소켓의 설정을 기다리기 위해 차단하지 않고 클라이언트 및 서버 소켓을 만드는 방법.
- POE:휠::저주 - 저주 텍스트 인터페이스 라이브러리의 차단되지 않는 입력을 위한 핸들러. 저주와 같은 CPAN 구성 요소:UI:POE 및 용어::시각적으로 그것을 기반으로 한다.
- POE:휠::FollowTail(팔로우테일) - 로그 또는 협업 문서와 같이 계속 증가하는 파일을 추적하여 파일의 꼬리를 유지하십시오.
- POE:휠::ListenAccept - POE의 하위 집합:Wheel:SocketFactory는 기존 서버 소켓에서 수신하고 원격 클라이언트에서 연결을 수신하는 데 사용됨.
- POE:휠::ReadLine - 비차단, 이벤트 중심 아날로그-Term::ReadLine.
- POE:휠::ReadWrite - POE 드라이버와 필터를 사용하여 다음 레이어에 그리는 파일 핸들에 버퍼링된 읽기 및 쓰기를 수행하는 POE용 고성능 NBIO 파일 핸들러 - POE 자체의 작은 파일 시스템.
파일 계층
운전자들은 파일 핸들을 읽고 쓰는 실제 작업을 한다. 그것들은 POE::운전자 모듈에 포함된 덜 추상적인 정의에 따라 구축된다. 이 작성 시점에 구현된 주요 드라이버는 POE:: 드라이버::SysRW - 특히 POE를 위해 설계된 범용 파일 핸들 리더/라이터:휠:ReadWrite.
POE를 기반으로 구축된 다음 계층:필터 및 대부분의 Perl Obfuscation Efficianados(아래 POE #POE 유머 참조)의 초점은 POE:필터 세트:
"필터는 생하천과 맛있는 다다미 덩어리 사이를 번역한다."는 '선고'의 한 구절이다.
- POE:필터::블록 - 입력을 고정 길이 블록으로 구문 분석. 출력측에서는 단지 데이터를 무해결로 전달한다.
- POE:필터::HTTPD - 입력을 HTTP 요청으로 구문 분석하여 HTTP::Request 객체로 변환. 출력 측에서 HTTP::응답 객체를 웹 클라이언트/사용자-에이전트로 전송하기에 적합한 것으로 변환한다.
- POE:필터::라인 - 들어오는 스트림을 선으로 파싱하고 나가는 라인을 스트림으로 변환한다. 예전에는 매우 기초적이었지만, 최근의 개선은 뉴라인 자동 인식과 같은 흥미로운 특징들을 추가했다.
- POE:필터::참조 - POE 프로그램 간 또는 POE와 다른 Perl 프로그램 간 Perl 구조를 전송하는 데 사용. 입력 측에서 동결된 데이터(저장 가능, 동결)해동, YAML 또는 기타 직렬화 메커니즘)은 Perl 데이터 구조로 해동된다. 출력 시 필터에 제공된 참조가 동결된다. 또한 다음과 같은 경우 요청에 따라 데이터를 압축할 수도 있다.:Zlib가 설치됨.
- POE:필터::스트림 - 아무 것도 하지 않음. 그것은 단지 아무런 변화 없이 데이터를 통과시킬 뿐이다.
전체 목록은 CPAN에서 POE를 참조하십시오.
POE 구성 요소
POE에 따라 몇 가지 더 큰 패키지가 POE로 작성되었다:구성 요소 문서. 이들은 이벤트 기반 모듈로, 많은 모듈들이 그들이 속한 더 큰 패키지에 서비스를 제공하는 작은 데몬 역할을 한다. 이들 중 일부는 모듈 간, 특히 Perl의 주요 분포로부터 독립적으로 유지되어야 하는 독립형 응용 프로그램 간의 더 높은 수준의 통신을 촉진한다.
일반적으로 POE 구성요소는 특정 대형 업무를 수행하는 기성 고급 절차다. 몇 가지 예:
- 구성 요소::서버::TCP - 특수 목적 TCP 서블릿
- 구성 요소::클라이언트::TCP - POE 인식 TCP 클라이언트
- POE:구성 요소::IRC - 거의 모든 기능을 갖춘 IRC 고객.
- POE:구성 요소::서버::IRC - RFC 2810에서 RFC 2813 호환 IRC 서버(개발 중)
- POE:구성 요소::UserBase - 사용자 인증 및 데이터 지속성 서블릿.
"POE 컴포넌트는 지루한 작업을 처리하는 매우 재사용 가능한 라이브러리인 경향이 있어 프로그래머들이 더 흥미로운 것에 집중할 수 있게 해준다. 그러나 이것은 어느 도서관에도 해당되어야 한다."
POE 유머
- Acme:POE:CPAN의 Knee 모듈.
- What POE Is의 끝에 있는 바보 같은 약어 확장.
참고 항목
- 이벤트 기반 프로그래밍
- Python 프로그래밍 언어와 비교할 수 있는 프레임워크인 트위스트