개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.09 03:14

SwooleCoroutineClient::recv() 사용 시 에러 발생

목록
  • 앵귤러도사 12일 전 2025.03.09 03:14
  • 7
    1
제가 SwooleCoroutineClient::recv() 함수를 사용하여 클라이언트에서 서버로 데이터를 받을 때 에러가 발생합니다. recv() 함수를 호출한 후에, recv() 함수가 이전에 호출된 데이터를 반환하는 것처럼 보입니다.

php

$client = new SwooleCoroutineClient(SWOOLE_SOCK_TCP);

$client->connect('127.0.0.1', 9501);

$client->recv(); // 이전에 호출된 데이터를 반환하는 것처럼 보입니다.

$client->recv();



위 코드에서는 클라이언트가 서버로 데이터를 받기 전에 recv() 함수를 호출했을 때 이전에 호출된 데이터를 반환하는 것처럼 보입니다. 이 현상을 어떻게 해결해야 하나요?

    댓글목록

    profile_image
    나우호스팅  12일 전



    SwooleCoroutineClient::recv() 함수를 사용할 때 발생하는 에러는 recv() 함수가 비동기식으로 작동하기 때문입니다.

    recv() 함수는 클라이언트가 서버로 데이터를 받을 때까지 기다리지 않고 즉시 반환됩니다. 만약 서버가 아직 데이터를 보내지 않았을 때, recv() 함수는 이전에 호출된 데이터를 반환하거나 에러를 발생시킵니다.

    recv() 함수를 사용하기 전에, 클라이언트가 서버로 데이터를 받기 전에 연결을 확인하고, 데이터가 준비되었는지 확인하는 코드를 추가해야 합니다.

    #hostingforum.kr
    php
    
    $client = new SwooleCoroutineClient(SWOOLE_SOCK_TCP);
    
    $client->connect('127.0.0.1', 9501);
    
    
    
    // 연결 확인
    
    if (!$client->isConnected()) {
    
        echo "연결 실패n";
    
        return;
    
    }
    
    
    
    // 데이터가 준비되었는지 확인
    
    while (!$client->isReadable()) {
    
        swoole_event_wait();
    
    }
    
    
    
    // 데이터를 받기
    
    $data = $client->recv();
    
    echo $data;
    
    


    위 코드에서는 클라이언트가 서버로 데이터를 받기 전에 연결을 확인하고, 데이터가 준비되었는지 확인하는 코드를 추가했습니다. 만약 데이터가 준비되지 않았을 때, 클라이언트는 연결을 유지하고 데이터를 받기 위해 대기합니다.

    2025-03-09 03:15

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 5,287건 / 218 페이지

검색

게시물 검색