안녕하세요,

 

XE에서 로그인한 회원의 포인트 정보를 '실시간'으로 불러오고 싶습니다.

아래처럼 PHP를 짜봤지만, 포인트 변동이 있어도 처음 불러온 포인트를 그대로 뱉어내더라고요.

 

<?php
  ini_set('max_execution_time', 10);   // 테스트를 위해 10초만 동작

  define('__XE__', true);
  require_once("../../config/config.inc.php"); // 파일의 위치에 따라 수정
  $oContext = &Context::getInstance()->init();

  $logged_info = Context::get('logged_info');
  $member_srl = $logged_info->member_srl; // 회원번호를 로그인 세션에서 가져옴

  $oPointModel = &getModel('point');
  $pointBalance = $oPointModel->getPoint($member_srl); // 회원의 포인트를 불러옴

  while ($pointBalance > 0) {   // 포인트가 0 초과인 경우
    print $pointBalance . "<br />";
    session_write_close();    // 다른 서버 요청들을 위해 세션 닫음
    usleep(100000);   // 0.1초 sleep
    session_start();    // 세션 다시 열음
    $pointBalance = $oPointModel->getPoint($member_srl); // 포인트 다시 불러움... 근데 여기서 막힘.
  }
  echo $pointBalance;   // 반복문 밖에서 선언... 이렇게 하는거 맞...죠?
?>

 

뭘 어찌해야 될지 전혀 감이 안와서 답답합니다 ㅜㅜ

PHP 밖에서 선언을 다시 해줘야 한다고 아는데...

음... 안먹힙니다 ㅜㅜ

 

도와주세요!! ㅠㅠ

 

 

추가:

 

작동하면 10초 뒤에, 읽어들인 포인트를 뱉어냅니다.

예를들어 제 포인트가 30이면,

30

30

30

...

이런식으로요.

문제는 중간에 포인트 변동이 있어도 계속 30으로 뱉어낸다는게..

  • profile

    음... 저런 방식으로 "실시간"을 구현하는 것은 서버 터지는 지름길이긴 합니다만...

     

    포인트 모듈은 성능 개선을 위해 최근에 불러온 포인트를 기억해 두었다가 그대로 반환하도록 되어 있습니다. 한 요청이 끝난 후(현재 실행중인 PHP 파일이 끝난 후)에야 갱신됩니다. 같은 파일에서 호출하는데 매번 포인트를 새로 불러오도록 하려면 아래와 같이 true를 넘겨주면 됩니다.

     

    $pointBalance = $oPointModel->getPoint($member_srl, true);

     

    P.S. 만약 질문하신 분과 100% 동일한 상황이 아닌데 그냥 포인트 불러오는 법을 검색하시다가 나중에 이 댓글을 읽고 계신 분이 있다면, 절대로 true 넣지 마세요. 성능이 나빠집니다.

  • profile profile
    • Rixx
    • 질문기여자
    성능이 저하되는군요.. 그럼 다른 방법도 한번 연구해봐야겠네요.
    답변 정말 감사합니다!
  • profile
    실시간으로 하려는 이유가 궁금하네요
  • profile profile
    • Rixx
    • 질문기여자
    인터넷 플랫폼 서비스를 준비하고 있습니다.

    포인트를 구입해서 분/초 단위로 시간을 재서 그만큼 포인트를 차감해야 하는데, php 프로그램으로 일처리를 하려다 보니 그렇게 됬네요..
  • ?
    동접수를 실실간으로 불러오는것 같은것은 문제 없지만 포인트를 실시간으로 불러 오는것은 서버부하가 많을것 같습니다
    서버사양이 좋다면야 ㅎㅎㅎ
    화이팅 입니다 나중에 좋은 작품 나오면 소스 정보좀 공유해주세요 ㅎㅎ
  • ? profile
    • Rixx
    • 질문기여자
    서버쪽을 많이 신경써야겠네요.. 조언 감사합니다!