>  기사  >  백엔드 개발  >  1초 동안 정지한 후 계속해서 데이터 읽기

1초 동안 정지한 후 계속해서 데이터 읽기

WBOY
WBOY앞으로
2024-02-11 08:27:08423검색

1초 동안 정지한 후 계속해서 데이터 읽기

php 편집기 Banana는 "1초 동안 멈춘 후에도 계속 데이터 읽기"라는 흥미로운 트릭을 여러분과 공유하기 위해 왔습니다. 프로그래밍에서는 후속 작업을 계속 수행하기 전에 일정 시간 동안 기다려야 하는 경우가 있는데, 이 기술은 이러한 목표를 달성하는 데 도움이 될 수 있습니다. 네트워크 요청의 지연된 작업에 사용되거나, 시간이 많이 걸리는 특정 작업이 프로그램의 실행 효율성에 영향을 미치는 것을 방지하기 위해 이 기술이 중요한 역할을 할 수 있습니다. 아래에서는 이 기능을 php에서 어떻게 구현하는지 자세히 소개하겠습니다.

질문 내용

curl을 사용하여 엔드포인트에서 데이터를 가져와 내 프로그램으로 전송하고 있습니다. 프로그램의 주요 기능은 다음과 같은 데이터를 읽습니다

으아아아

지금까지는 모든 것이 괜찮습니다. 그러나 최종 목표는 프로그램이 N 시간 간격으로 도착하는 N JSON 블롭을 읽을 수 있도록 일정 기간 동안 이와 같이 끝점을 반복적으로 컬링하는 것입니다.

으아아아

엔드포인트까지 컬링할 때마다 동일한 구조화된 데이터에 도달합니다. 그래서 데이터 읽는 코드를 함수로 옮겨야 합니다readStdIn 中,我将重复调用该函数,直到curl 停止发送数据,并且每次我的程序接收到 json 数据时,我都会将其解组到结构中并将其添加到切片中。为了重复调用 readStdIn,我使用了 for 循环,为了读取 readStdIn 中的数据,我也使用了 for 循环。 readStdIn 함수가 절대 완료되지 않습니다. 왜 안 돼?

주요 기능

으아아아

readStdIn 함수

reader := bufio.NewReader(os.Stdin)
var buf bytes.Buffer
line, err := reader.ReadString(`\n`)
for {
  if err != nil{
     buf.WriteString(line)
     break
   }
  buf.WriteString(line)
}
var data Memstats
err = json.Unmarshal(buf.Bytes(), &data)

JSON 분석을 위한 해결 방법

기능을 사용자 정의하거나 bash 스크립트를 변경하여 스캐너를 사용할 수도 있습니다. 그러나 나는 둘 다 아래 코드보다 더 복잡하다고 생각합니다.

으아아아 으아아아

줄 바꿈으로 구분된 데이터의 경우

으아아아

새 프로그램 인스턴스(예: 예) 생성과 일반적인 파이프 사용 모두에 작동합니다.

동일한 파이프라인 사용

으아아아

출력:

으아아아

다른 파이프라인 사용(매번 새 인스턴스)

while 睡眠 1;做 echo "$(date)" | ./我的程序;完成 출력:

으아아아

위 내용은 1초 동안 정지한 후 계속해서 데이터 읽기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제