|
|
AMF(Action Message Format)이란?
-한마디로 말해서 서버와 SWF(플래시)의 통신이 AMF라고 불리는 Binary형식의 프로토콜을 사용하여 이루어지며 서버상에 있는 원격지 객체를 호출합니다.
-가장 작은 패킷 크기에 데이터 통신에 필요한 거의 모든 옵션을 넣을 수 있는 바이너리 메세징 프로토콜
-HTTP(80포트), HTTPS(443)를 통해 통신하기 때문에 방화벽을 무시할 수 있습니다.
-AMF는 플래시 플레이어가 인식 가능한 기본 메세징 포맷이므로 클라이언트에서 데이터 직렬화와 역직렬화가 자동으로 처리되며 속도도 빠릅니다.
-게이트웨이는 HTTP(80포트), HTTPS(443)를 통해 AMF패킷 송수신, AMF직렬화/역직렬화, 적절한 서비스에 요청위임 등을 수행할 수 있는 게이트웨이 라이브러리가 필요합니다. 이러한 게이트웨이 라이브러리 여러 종류 중에 우리는 여기서 ZendAMF라는 것을 사용할 것입니다.
AMF의 구조 : http://wiki.gnashdev.org/AMF
Actionscript & PHP Type Mapping
ActionScript to PHP mapping |
|
ActionScript |
PHP |
class mapped object | |
PHP to ActionScript mapping |
|
PHP |
ActionScript |
Associative Array w/ mix of keys |
|
Associative Array w/ Numeric index of keys |
|
typed object | |
Zend_Amf_Value_ByteArray |
|
Zend_Amf_Value_ArrayCollection |
|
원본 위치 <http://framework.zend.com/wiki/display/ZFPROP/Zend_Amf+-+Wade+Arnold>
ZendAMF란?
-Remoting Gateway Library로써 Adobe가 공식지원하여 Zend 프레임워크에서 만들었습니다. AMF3 스펙를 사용하여 AMF0스펙를 사용한 AMFPHP보다 뛰어난 성능을 발휘합니다.
----------------------------------------------------------------------------------------------------------------------
AMF3 스펙 기반으로 만들어진 ZendAMF 라이브러리를 가볍고 막강한 성능을 자랑하는 CI에 추가해보도록 하겠습니다.
-
준비물:
- CodeIgniter (http://codeigniter.com)
- ZendAMF (http://framework.zend.com/download/amf)
-
CodeIgniter를 서버에 설치한 후 ZendAMF를 압축해제합니다. 그러면
이 생성됩니다. 여기서 사용할 것은 library폴더에 들어있는 Zend라는 넘만 쓸 것입니다. Zend폴더를 복사하여
system>application>libraries>Zend폴더에 넣습니다. -
CI의 config파일의 내용변경
$config['enable_hooks'] = FALSE; --> $config['enable_hooks'] = TRUE;로 변경합니다.
-
후킹을 통한 프레임워크 코어확장
코어파일을 해킹하지 않고도 내부작동방식을 변경하게 하는 기능인 후킹(설명)을 이용하여 컨트롤러가 호출되기 직전(pre-controller)에 실행하게 되게 추가합니다.위 hooks.php 파일에 아래 코드를 추가하시면 됩니다.
$hook['pre_controller'][] = array( 'class' => 'App_hook', 'function' => 'index', 'filename' => 'app_hook.php', 'filepath' => 'hooks' ); |
app_hook.php 파일 안의 코드는
<?php if(!defined('BASEPATH')) exit('No direct script access allowed');
class App_hook { function index() { ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.BASEPATH.'application/libraries/'); } } ?> |
이는 기존의 include_path의 값에 appliaction/libraries/를 추가한 것입니다.
6. Zend 클래스와 다른 프레임워크 클래스를 이용하기 위해 하나의 사용자 라이브러리 파일을 만듭니다.
그 파일 안의 코드는 다음과 같습니다.
<?php if (!defined('BASEPATH')) {exit('No direct script access allowed');}
class Apps { function __construct($class = NULL) { if(!empty($class) && is_array($class)) { foreach($class as $item) { $this->load($item); } } }
function load($class) { require_once (string) $class . EXT; } } ?> |
<?php class Remote extends Controller { function Remote() { parent::Controller(); }
function index() { $this->load->library("Apps"); $this->apps->load("Zend/Amf/Server"); //여기서 AMF가 아니라 Amf입니다. 각자 다를 수 있으니 확인하세요
$server = new Zend_Amf_Server(); $server->setClass($this); echo $server->handle(); }
function getData() { return array(1,2,3,4,5); } } ?> |
이라고 뜬다면 성공입니다. 그 외에 폴더명이 잘못되서 에러가 발생할 수 있습니다. 다시 한번 대소문자를 꼭 확인!!
참고사이트
http://codeigniter.com/wiki/AMF_Flash_Remoting_with_Zend_and_CI/
http://www.cyworld.com/duck_info/3856801
http://framework.zend.com/wiki/display/ZFPROP/Zend_Amf+-+Wade+Arnold
'Web Programming > PHP' 카테고리의 다른 글
Flex와 PHP(CodeIgniter+ZendAMF) 연동하기 (3) | 2010.10.02 |
---|---|
[CodeIgniter] Multiple Image Upload (1) | 2009.11.26 |
CentOS 5.2 APM 구축 매뉴얼 (2) | 2009.11.03 |
파라미터가 UTF-8 인지 검사 (0) | 2009.04.24 |
PHP 사용자를 위한 EditPlus 설정 (3) | 2009.02.27 |