Julia의 웹 소켓을 통해 프로토콜 버퍼 메시지 게시

user888379

저는 줄리아 서버 프로세스가 이진 데이터와 관련된 메시지를 주기적으로 게시하는 프로젝트를 진행 중입니다. 초기 클라이언트는 자바 스크립트로 작성되지만 궁극적으로 다양한 방식으로 구현 된 여러 클라이언트를 보유하는 기능을 원합니다. 따라서 프로토콜 버퍼를 사용하여 메시지를 정의하고 싶습니다. 3 개의 Julia websocket 구현을 찾았습니다 : WebSockets.jl, SimpleSockets.jl그리고 HTTP.jl의 WebSockets. 몇 가지 순진한 실험을 WebSockets.jl했고 오류가 발생했습니다 ( "WebSockets는 바이트 I / O를 지원하지 않습니다"). 나의 목표는 HTTP.jl구현에 초점을 맞추는 것입니다. 보다 적극적인 개발중인 느낌이 듭니다 WebSockets.jl.

업데이트 : 실험을 계속했습니다. 나는 이전의 SO 질문으로 안내 받았는데 , websocket에 바이너리 데이터를 쓸 수 없었습니다 . 링크에서 서버 구현을 모델링하여 다음을 산출했습니다.

include("testmessage_pb.jl")

text = "A man spekith"
msg = TestMessage(someText=text)

function server(port)
    @async HTTP.listen(Sockets.localhost, port) do http::HTTP.Stream
        if HTTP.WebSockets.is_upgrade(http.message)
            HTTP.WebSockets.upgrade(http, binary=true) do ws
                while !eof(ws)
                    data = readavailable(ws)
                    IOExtras.startwrite(ws)
                    writeproto(ws, msg)
                    IOExtras.closewrite(ws)
                end
            end
        end
    end
end

그것을 실행하면 이전에보고 한 것과 매우 유사한 오류가 발생했습니다. HTTP.WebSockets.WebSocket{HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}} does not support byte I/O

이 글을 읽는 사람이이 특정 기술 클러스터 (julia, protobuf, websockets)에 대한 경험이 있고 진행 방법에 대한 제안 ( "시도하지 마십시오"가 유용한 피드백으로 간주 됨)이 있는지 궁금합니다.

user888379

질문에서 보여준 서버 구현을 조정할 수 있었고 이제 작동합니다. 약간 투박하고 더 좋은 접근 방식이 나오기를 바라면서 내 대답을 받아들이지 않을 것입니다. 어쨌든 다음은 새 버전입니다.

function server(port)
    @async HTTP.listen(Sockets.localhost, port) do http::HTTP.Stream
        if HTTP.WebSockets.is_upgrade(http.message)
            HTTP.WebSockets.upgrade(http, binary=true) do ws
                while !eof(ws)
                    data = readavailable(ws)
                    iob = PipeBuffer()
                    writeproto(iob, msg)
                    write(ws, take!(iob))
                end
            end
        end
    end
end

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

웹 소켓을 통한 스프링 스톰프 : 메시지 / 버퍼 / 캐시 / 스트림 제한

프로토콜 버퍼 메시지의 엔디안

프로토콜 버퍼 (protobufs) / 바이너리 대 JSON / 텍스트 성능을 통한 웹 소켓

웹 소켓을 통해 RabbitMQ 메시지 보내기

nginx를 통해 웹 소켓 프록시

C ++에서 소켓을 통한 프로토콜 버퍼

RabbitMQ, 하나의 프로토콜을 통해 게시하고 다른 프로토콜을 통해 소비 할 수 있습니까?

Make를 통해 프로토콜 버퍼의 변경 사항을 자동으로 감지하기

브라우저의 웹 소켓을 통해 하나의 메시지만 보내는 Javascript

Cloud PubSub를 통해 게시할 때 프로토콜 버퍼 메시지를 직렬화 해제하는 중 오류 발생

주기적으로 봄 웹 소켓을 통해 클라이언트에 메시지를 보내기

두 Google 프로토콜 버퍼 메시지의 내용이 동일한 지 어떻게 비교합니까?

프로토콜 버퍼와 통합 하시겠습니까?

nginx를 통해 Play 서버에 대한 프록시 보안 웹 소켓

POJO를 프로토콜 버퍼 요청 메시지로 변환

서버가 C의 소켓을 통해 클라이언트에 메시지를 보낼 수 없습니다.

프로토콜 버퍼-중첩 된 메시지 할당

자바 프로토콜 버퍼-메시지 크기

프로토콜 버퍼에서 메시지 분리

크롬 창을 닫아 버퍼를 0으로 플러시하는 것처럼 웹 소켓을 닫는 방법

tcp 소켓을 통해 Java 서버에서 Android 클라이언트로 메시지 반환

Swift 클라이언트에서 Java 서버로 소켓 출력 스트림을 통해 메시지 보내기

Spring 메시징 + 보안 웹 소켓을 통해 로그인하는 방법은 무엇입니까?

Java의 프로토콜 버퍼 : 원시 배열을 효율적으로 처리 할 수 있습니까?

프로토콜 버퍼 ParseFromString은 메시지 끝을 확인하지 않습니다.

프로토콜 버퍼 : 필드 이름을 변경하면 메시지가 깨지나요?

레거시 앱 서버 프로토콜을 통해 데이터 메시지를 보낼 때 분석 레이블을 추가하는 방법

프로토콜 버퍼 Java 소스 코드의 해결되지 않은 종속성

C # .net Core의 소켓 연결을 통해 Graph QL 쿼리를 메시지로 보내기

TOP 리스트

  1. 1

    셀레늄의 모델 대화 상자에서 텍스트를 추출하는 방법은 무엇입니까?

  2. 2

    Blazor 0.9.0 및 ASP.NET Core 3 미리보기 4를 사용한 JWT 인증

  3. 3

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  4. 4

    C # 16 진수 값 0x12는 잘못된 문자입니다.

  5. 5

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  6. 6

    오류 : MSB4803 : MSBuild의 .NET Core 버전에서 "ResolveComReference"작업이 지원되지 않습니다.

  7. 7

    R에서 Excel로 내보낼 때 CET / CEST 시간 이동이 삭제됨

  8. 8

    node.js + postgres : "$ 1"또는 그 근처에서 구문 오류

  9. 9

    확대 후 하이 차트에서 Y 축이 잘못 정렬 됨

  10. 10

    EPPlus에서 행 높이를 설정할 때 이상한 동작

  11. 11

    Ionic 2 로더가 적시에 표시되지 않음

  12. 12

    MS Access 부분 일치 2 테이블

  13. 13

    EPPlus에서 병합 된 셀의 행 높이 자동 맞춤

  14. 14

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  15. 15

    ResponseEntity를 사용하고 InputStream이 닫히는 지 확인하는 적절한 스트리밍 방법

  16. 16

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  17. 17

    오류 : "const wchar_t *"유형의 인수가 "WCHAR *"유형의 매개 변수와 호환되지 않습니다.

  18. 18

    Java에서 이미지를 2 색으로 변환

  19. 19

    overflow-y를 사용할 때 스크롤 버벅 거림 줄이기 : scroll;

  20. 20

    Java에서 Apache POI를 사용하여 테이블 크기 및 간격을 단어로 설정하는 방법

  21. 21

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

뜨겁다태그

보관