QtWebEngine은 IPC 메커니즘을 사용하여 C + Qt 월드와 JavaScript 작업간에 통신합니다. 이 메커니즘은 QWebChannel에 사용되며 WebSocket을 기반으로하는 것으로 보입니다. QWebChannel을 사용하지 않고 기본 IPC 또는 WebSocket을 사용하는 방법이 있나요? 후자는 문자열이나 JSON 인코딩 데이터로 제한된 것 같습니다.QWebChannel없이 QtWebEngine의 기본 IPC에 액세스 할 수 있습니까?
배경 : QWebChannel을 사용하여 PTY의 입력/출력을 QtWebEngine에 연결하는 JavaScript 기반 터미널 에뮬레이터 인 QtDomTerm 응용 프로그램을 작성했습니다. 이것은 꽤 잘 작동하지만, utf8/문자열 변환과 관련된 결함이 있습니다. 이상적으로는, 나는 PTY로부터 raw 바이트를 보내고, 자바 스크립트에서 byte-to-text 변환을하고 싶습니다. 그러나 QWebChannel은 너무 높은 수준이며 문자열이나 JSON 인코딩 데이터 만 처리합니다. QByteArray를 처리하지 않습니다.
물론 여러 가지 방법으로 내 문제를 해결할 수 있습니다. 하나는 수동으로 WebSocket 서버를 만들고 QtWebEngine에서 실행중인 JavaScript를 연결하는 것입니다. 그러나 그것은 어쨌든 장면 뒤에서 진행되고있는 것인데, qt.webChannelTransport
을 사용하고있는 것처럼 보입니다. 기본 전송 수단 (클래스 WebChannelIPCTransportHost
이 관련있는 것으로 보입니다)에 액세스 할 수 있다면 가장 효율적이고 우아 할 것 같습니다.
누구나 다음과 같이 시도했습니다. 나는. 나는 이 아니라 QWebChannel을 사용하고 싶습니다. QByteArray를 전달하는 효율적인 방법이 없다면 말입니다.
은 (명확한 답을 찾지 못하고, 여기에 내가 연구 누락에 대한 코멘트가 발생했습니다. 문제를 고쳐,하지만 난 Qt는 docuemntation, 소스 코드 불구하고 많이 찾아 한합니다.)에서 당신을 방지 무엇
:-) 자신을 도울 수 없습니다 (그리고 비교적 간단하게) 바이트를 16 진수로 변환하고 결과 문자열을 전송합니다.그러나 전송되는 데이터의 양이 두 배로 늘어나는 것은 당연히 비효율적입니다. 그것은 또한 나의 감각을 상하게합니다. 왜 바이트를 16 진수로 변환합니까? 우리가 바이트 프로토콜을 사용하는 이유는 무엇입니까? 내 응용 프로그램에서는 QWebChanell의 기능이 필요하지 않습니다. "out-of-band"메시지에 대한 메커니즘이 이미 있으므로 간단한 양방향 바이트 채널 만 있으면됩니다. –
일반 TCP 소켓과 웹 소켓을 사용할 수 없습니까? –
"TCP 소켓과 웹 소켓"을 사용하는 것은 괜찮습니다. 기본적으로 새로운 수신기와 연결을 만드는 대신 기존의 IPC 연결을 피기 백하는 것이 더 간단하고 견고 할 것입니다. QWebChannel은 이미 연결을 설정합니다. 기존 QWebChannel 레벨보다는 낮은 (바이트 스트림) 레벨에서 기존 연결을 사용하는 편이 낫습니다. (질문을 업데이트하여 희망적으로 명확하게 만들었습니다.) –