Amp \ Websocket을 사용하여 오픈 스트림 연결에서 websocket 핑을 받으시겠습니까?

Tmarois

여기에 readme 예제를 사용하고 있습니다.

https://github.com/amphp/websocket-client/blob/master/README.md

use Amp\Websocket;
use Amp\Delayed;
use Amp\Websocket\Connection;
use Amp\Websocket\Handshake;
use Amp\Websocket\Message;
use function Amp\Websocket\connect;

\Amp\Loop::run(function () use ($fn)
{
    try 
    {
        $connection = yield connect('wss://....');

        yield $connection->send('{
            "action":"authenticate",
            "data":{
                ...
            }
        }');

        while ($message = yield $connection->receive()) 
        {
            $payload = yield $message->buffer();

            // print the payload
            $this->info($payload);  

            // custom function to parse the payload
            $r = $fn($payload);

            if ($r == false) {
                $this->warn('Connection closed.');
                $connection->close();
                break;
            }
        }
    }
    catch (\Throwable $e) {
        $this->isError($e->getMessage(),true);
    }
    catch (\Exception $e) {
        $this->isError($e->getMessage(),true);
    }
});

문제 : while 루프는 메시지가 스트림을 통해 전송 될 때만 실행되며 메시지가 없으며 유휴 모드 대기 상태이므로 아무 일도 일어나지 않습니다.

솔루션 : 핑을 수신하거나 핑에서 while 루프를 실행하면서 메시지를 수집하려면 어떻게해야합니까?

예를 들어, 일부 정보 (예 : 소켓이 열려 있어야 함)를 확인하는 것을 제어하고 싶지만 메시지가 스트림을 통해 올 때만 확인할 수 있습니다. 활동이 있으므로 정보가 전송되지 않으면 영원히 기다립니다.

핑은 RFC에 기반한 웹 소켓의 표준입니다 : https://tools.ietf.org/html/rfc6455

Rfc6455Connection연결 클래스, 핑이있다, 그러나이 접근하거나 직접를 사용하는 방법에 대한 문서가 제공되지 않습니다.

핑에서 while 루프를 실행하고 동시에 메시지가 있는지 확인하는 것이 좋습니다. 이것이 가능합니까?

Kelunik

amphp/websocket-client 핑을 자동으로 처리하고 이에 응답하므로 API 사용자가 가져야 할 유일한 문제는 메시지 수신입니다.

Amp를 사용하면 Amp\call/를 사용하여 언제든지 여러 코 루틴을 생성 Amp\asyncCall할 수 있으므로 예를 들어 유휴 시간 후에 연결을 닫을 수 있습니다.

Loop::run(function () {
    try {
      $connection = yield connect($uri);

      asyncCall(function () use ($connection) {
        while (true) {
          if (!$this->isActive()) {
            $connection->close();
            break;
          }

          yield Amp\delay(1000);
        }
      });

      yield $connection->send('...');

      while ($message = yield $connection->receive()) {
          $payload = yield $message->buffer();

          $r = $fn($payload);

          if ($r == false) {
              $this->warn('Connection closed.');
              $connection->close();
              break;
          }
      }
  } catch (\Exception $e) {
      $this->isError($e->getMessage(),false);
  }
});

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Websocket을 사용하여 연결이 끊긴 Jenkins 에이전트

분류에서Dev

WebSocket을 사용하여 Angular 클라이언트에 JSON 푸시

분류에서Dev

WebSocket을 사용하여 연결 유지

분류에서Dev

JavaScript를 사용하여 Websocket을 Qt Fortune 서버에 연결

분류에서Dev

Exoplayer, 오디오 스트림과 비디오 스트림을 동시에 재생 하시겠습니까?

분류에서Dev

iOS WebSocket이 SocketRocket을 사용하여 서버에 연결하지 않음

분류에서Dev

Wikimedia Maps Layer (오픈 스트리트 맵)에서 429 오류 발생 (wget을 사용하여 SSL에 연결하는 데 문제 발생)

분류에서Dev

Windows C ++ LockFIle ()을 사용하여 파일을 잠근 다음 스트림을 가져 오시겠습니까?

분류에서Dev

웹 스크래핑-BeautifulSoup 및 Python을 사용하여 수업에서 텍스트를 가져 오시겠습니까?

분류에서Dev

ODB를 사용하여 R을 오픈 오피스 데이터베이스에 연결

분류에서Dev

Windows 원격 데스크톱을 사용하여 Windows 10에서 Ubuntu 15.04로 연결 하시겠습니까?

분류에서Dev

AMP CDN 또는 로컬 AMP 사이트에 연결 하시겠습니까?

분류에서Dev

특정 시간에 시스템 알림을 받으시겠습니까?

분류에서Dev

부트 스트랩을 사용하여로드 오픈 모델 팝업에?

분류에서Dev

QLDB에서 스트림을 활성화 하시겠습니까?

분류에서Dev

루비에서 컬을 오픈 URI로 변환 하시겠습니까?

분류에서Dev

JMS ConnectionFactory 및 대기열을 WebSocket에 삽입 하시겠습니까?

분류에서Dev

VBA를 사용하여 Excel에서 여러 텍스트 파일을 하나의 셀과 새 행으로 가져 오시겠습니까?

분류에서Dev

동일한 websocket 연결을 다시 사용할 수 있습니까?

분류에서Dev

nestjs를 사용하여 websocket 메시지를받을 수 없습니다.

분류에서Dev

celery 및 websocket을 사용하여 Azure 앱 서비스에 Python Django 앱 배포

분류에서Dev

트위터 스트림을 tweepy로 소비하고 gevent를 사용하여 websocket을 통해 콘텐츠 제공

분류에서Dev

Websocket을 사용하여 메시지를받는 방법은 무엇입니까?

분류에서Dev

스프링 부트에서 websocket을 사용하고 js에 반응하는 방법은 무엇입니까?

분류에서Dev

SignalR을 사용하여 WinForm 서버에 연결 하시겠습니까?

분류에서Dev

AJAX 오류로 서버 응답을 받으시겠습니까?

분류에서Dev

jpanel에서 버튼을 검색하고 버튼의 텍스트를 받으시겠습니까?

분류에서Dev

WebSocket을 사용하여 tornado를 사용하여 클라이언트 포트 번호 가져 오기

분류에서Dev

스트림에서 여러 목록을 하나의 객체 목록으로 병합 하시겠습니까?

Related 관련 기사

  1. 1

    Websocket을 사용하여 연결이 끊긴 Jenkins 에이전트

  2. 2

    WebSocket을 사용하여 Angular 클라이언트에 JSON 푸시

  3. 3

    WebSocket을 사용하여 연결 유지

  4. 4

    JavaScript를 사용하여 Websocket을 Qt Fortune 서버에 연결

  5. 5

    Exoplayer, 오디오 스트림과 비디오 스트림을 동시에 재생 하시겠습니까?

  6. 6

    iOS WebSocket이 SocketRocket을 사용하여 서버에 연결하지 않음

  7. 7

    Wikimedia Maps Layer (오픈 스트리트 맵)에서 429 오류 발생 (wget을 사용하여 SSL에 연결하는 데 문제 발생)

  8. 8

    Windows C ++ LockFIle ()을 사용하여 파일을 잠근 다음 스트림을 가져 오시겠습니까?

  9. 9

    웹 스크래핑-BeautifulSoup 및 Python을 사용하여 수업에서 텍스트를 가져 오시겠습니까?

  10. 10

    ODB를 사용하여 R을 오픈 오피스 데이터베이스에 연결

  11. 11

    Windows 원격 데스크톱을 사용하여 Windows 10에서 Ubuntu 15.04로 연결 하시겠습니까?

  12. 12

    AMP CDN 또는 로컬 AMP 사이트에 연결 하시겠습니까?

  13. 13

    특정 시간에 시스템 알림을 받으시겠습니까?

  14. 14

    부트 스트랩을 사용하여로드 오픈 모델 팝업에?

  15. 15

    QLDB에서 스트림을 활성화 하시겠습니까?

  16. 16

    루비에서 컬을 오픈 URI로 변환 하시겠습니까?

  17. 17

    JMS ConnectionFactory 및 대기열을 WebSocket에 삽입 하시겠습니까?

  18. 18

    VBA를 사용하여 Excel에서 여러 텍스트 파일을 하나의 셀과 새 행으로 가져 오시겠습니까?

  19. 19

    동일한 websocket 연결을 다시 사용할 수 있습니까?

  20. 20

    nestjs를 사용하여 websocket 메시지를받을 수 없습니다.

  21. 21

    celery 및 websocket을 사용하여 Azure 앱 서비스에 Python Django 앱 배포

  22. 22

    트위터 스트림을 tweepy로 소비하고 gevent를 사용하여 websocket을 통해 콘텐츠 제공

  23. 23

    Websocket을 사용하여 메시지를받는 방법은 무엇입니까?

  24. 24

    스프링 부트에서 websocket을 사용하고 js에 반응하는 방법은 무엇입니까?

  25. 25

    SignalR을 사용하여 WinForm 서버에 연결 하시겠습니까?

  26. 26

    AJAX 오류로 서버 응답을 받으시겠습니까?

  27. 27

    jpanel에서 버튼을 검색하고 버튼의 텍스트를 받으시겠습니까?

  28. 28

    WebSocket을 사용하여 tornado를 사용하여 클라이언트 포트 번호 가져 오기

  29. 29

    스트림에서 여러 목록을 하나의 객체 목록으로 병합 하시겠습니까?

뜨겁다태그

보관