웹 프론트엔드 JS 튜토리얼 protobuf.js 다운로드 및 사용에 대한 자세한 설명

protobuf.js 다운로드 및 사용에 대한 자세한 설명

Jul 02, 2017 am 09:31 AM
javascript protobuf websocket

ProtoBuf의 직렬화 효율성과 크기가 매우 좋기 때문에 네트워크 통신에 점점 더 많이 사용되고 있으며 web3.0과 함께 webosocket도 점점 더 널리 사용되고 있으며 이 둘의 조합도 점차 추세를 형성할 것입니다. ; 제가 작성한 C# websocket을 테스트하고 싶어서 웹에 pb와 결합된 js 예제도 작성했습니다.

1 먼저 protobuf.js

2를 다운로드하세요. protobuf 관련 js 파일 소개

<script src="/js/protobuf.js?1.1.11"></script>

3. proto 파일 만들기

1 package wenlipackage;2 syntax = "proto3";3 4 message WSMessage {  
5     required string id = 1;6     required string content = 2;7     required string sender = 3;8     required string time = 4;9 }
로그인 후 복사

js protobuf 형식 유형은

값 | 0 서명됨값 &gt;&gt;&gt; 서명되지 않은 경우
필드 유형 예상되는 JS 유형(생성, 인코딩) 변환(fromObject)
s-/u-/int32
s-/fixed32
번호 ( 32비트 정수)number (32 bit integer) value | 0 if signed
value &gt;&gt;&gt; 0 if unsigned
s-/u-/int64
s-/fixed64
Long-like (optimal)
number (53 bit integer)
Long.fromValue(value) with long.js
parseInt(value, 10) otherwise
float
double
number Number(value)
bool boolean Boolean(value)
string string String(value)
bytes Uint8Array (optimal)
Buffer (optimal under node)
Array.&lt;number&gt; (8 bit integers)
base64.decode(value) if a string
Object with non-zero .length is assumed to be buffer-like
enum number (32 bit integer) Looks up the numeric id if a string
message Valid message Message.fromObject(value)

s-/ u-/int64s- /fixed64

Long 유사(최적)숫자(53비트 정수)

Long.fromValue(value) with long.js
parseInt(값, 10) 그렇지 않으면

floatdouble

숫자
숫자(값) code&gt;<p></p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/001/219afae7bf96e66af308e09edde1ba92-0.png" class="lazy" alt="">bool </p> <p><code>부울

부울(값)

🎜🎜string🎜🎜string🎜🎜 문자열(값)🎜🎜🎜🎜bytes🎜🎜Uint8Array(최적)🎜Buffer(노드에서 최적)🎜Array.&lt;number&gt; 정수)🎜🎜base64.decode(value) 0이 아닌 .length가 있는 string🎜Object가 다음과 같은 경우 버퍼와 유사한 것으로 가정🎜🎜🎜🎜enum🎜🎜숫자(32비트 정수)🎜🎜문자열 🎜🎜🎜🎜message🎜🎜인 경우 숫자 ID를 찾습니다. 유효한 메시지🎜🎜Message.fromObject(값)🎜🎜🎜🎜🎜🎜 4. protobuf 초기화, 관련 데이터 직렬화 및 역직렬화🎜🎜🎜🎜🎜 🎜🎜
 1 &lt;script type=&quot;text/javascript&quot;&gt;
 2         var WSMessage;
 3         var wsmessage;
 4         var buffer;
 5         protobuf.load("/proto/Message.proto", function (err, root) {
 6             if (err) throw err;
 7             WSMessage = root.lookup("wenlipackage.WSMessage");
 8             wsmessage = WSMessage.create({ id: "1", content: "hello", sender: "web", time: new Date().getTime() });
 9             buffer = WSMessage.encode(wsmessage).finish();
10         });
11 &lt;/script&gt;
로그인 후 복사
🎜
WSMessage是一个解码编码器
로그인 후 복사
wsmessage是具体的某个定义的proto实例
是一个8位无符号的字节数组
로그인 후 복사
🎜🎜🎜5. 연결 대상 websocket을 사용하여 직렬화된 메시지를 보내고 역직렬화된 메시지를 받습니다🎜🎜🎜🎜
 1 &lt;script type=&quot;text/javascript&quot;&gt; 2         var wsUri = "ws://127.0.0.1:8082/"; 3         var output; 4         function init() { 5             output = document.getElementById("output"); 6             
 testWebSocket(); 7         } 8         function testWebSocket() { 9             websocket = new WebSocket(wsUri);10             websocket.onopen = function (evt) {11                 onOpen(evt)12             };            
 websocket.onclose = function (evt) {14                 onClose(evt)15             };16             websocket.onmessage = function (evt) {17                 onMessage(evt)18             };19             
 websocket.onerror = function (evt) {20                 onError(evt)21             };22         }23         function onOpen(evt) {24             writeToScreen("CONNECTED");25             doSend(buffer);
 }27         function onClose(evt) {28             writeToScreen("DISCONNECTED");29         }30         function onMessage(evt) {31             var reader = new FileReader();32             reader.readAsArrayBuffer(evt.data);
 reader.onload = function (e) {34                 var buf = new Uint8Array(reader.result);35                 writeToScreen('&lt;span style=&quot;color: blue;&quot;&gt;RESPONSE: ' + WSMessage.decode(buf).content + '&lt;/span&gt;');36             }37         }38         
 function onError(evt) {39             writeToScreen('&lt;span style=&quot;color: red;&quot;&gt;ERROR:&lt;/span&gt; ' + evt.data);40         }41         function doSend(message) {42             writeToScreen("SENT: " + wsmessage.content);43             
 websocket.send(buffer);44         }45         function writeToScreen(message) {46             var pre = document.createElement("p");47             pre.style.wordWrap = "break-word";48             
 pre.innerHTML = message;49             
 output.appendChild(pre);50         }51         window.addEventListener("load", init, false);52 &lt;/script&gt;
로그인 후 복사
🎜🎜 위의 내용은 내 websocket 서버가 하나의 바이너리를 반환하므로 브라우저가 수신하는 것은 blob입니다. 여기에서 blob 처리에 주의하세요🎜🎜🎜🎜🎜6 . 상호 운용성 테스트🎜🎜🎜🎜

위 내용은 protobuf.js 다운로드 및 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java와 WebSocket의 결합: 실시간 비디오 스트리밍을 달성하는 방법 Java와 WebSocket의 결합: 실시간 비디오 스트리밍을 달성하는 방법 Dec 17, 2023 pm 05:50 PM

Java와 WebSocket의 결합: 실시간 비디오 스트리밍을 달성하는 방법

PHP와 WebSocket을 사용하여 실시간 통신을 구현하는 방법 PHP와 WebSocket을 사용하여 실시간 통신을 구현하는 방법 Dec 17, 2023 pm 10:24 PM

PHP와 WebSocket을 사용하여 실시간 통신을 구현하는 방법

SSE 및 웹소켓 SSE 및 웹소켓 Apr 17, 2024 pm 02:18 PM

SSE 및 웹소켓

PHP 및 WebSocket: 실시간 데이터 전송 모범 사례 PHP 및 WebSocket: 실시간 데이터 전송 모범 사례 Dec 18, 2023 pm 02:10 PM

PHP 및 WebSocket: 실시간 데이터 전송 모범 사례

golang WebSocket 프로그래밍 팁: 동시 연결 처리 golang WebSocket 프로그래밍 팁: 동시 연결 처리 Dec 18, 2023 am 10:54 AM

golang WebSocket 프로그래밍 팁: 동시 연결 처리

Java Websocket은 온라인 화이트보드 기능을 어떻게 구현합니까? Java Websocket은 온라인 화이트보드 기능을 어떻게 구현합니까? Dec 17, 2023 pm 10:58 PM

Java Websocket은 온라인 화이트보드 기능을 어떻게 구현합니까?

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 Dec 17, 2023 pm 05:30 PM

WebSocket 및 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술

golang에서 파일 전송을 위해 WebSocket을 사용하는 방법 golang에서 파일 전송을 위해 WebSocket을 사용하는 방법 Dec 18, 2023 am 09:06 AM

golang에서 파일 전송을 위해 WebSocket을 사용하는 방법

See all articles