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

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

零下一度
零下一度원래의
2017-07-02 09:31:165162검색

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

1 먼저 protobuf.js

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

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 서명됨값 >>> 서명되지 않은 경우
필드 유형 예상되는 JS 유형(생성, 인코딩) 변환(fromObject)
s-/u-/int32
s-/fixed32
번호 ( 32비트 정수)number (32 bit integer) value | 0 if signed
value >>> 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.<number> (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><p></p> <p><img src="https://img.php.cn/upload/article/000/000/001/219afae7bf96e66af308e09edde1ba92-0.png" alt="">bool </p> <p><code>부울

부울(값)

🎜🎜string🎜🎜string🎜🎜 문자열(값)🎜🎜🎜🎜bytes🎜🎜Uint8Array(최적)🎜Buffer(노드에서 최적)🎜Array.<number> 정수)🎜🎜base64.decode(value) 0이 아닌 .length가 있는 string🎜Object가 다음과 같은 경우 버퍼와 유사한 것으로 가정🎜🎜🎜🎜enum🎜🎜숫자(32비트 정수)🎜🎜문자열 🎜🎜🎜🎜message🎜🎜인 경우 숫자 ID를 찾습니다. 유효한 메시지🎜🎜Message.fromObject(값)🎜🎜🎜🎜🎜🎜 4. protobuf 초기화, 관련 데이터 직렬화 및 역직렬화🎜🎜🎜🎜🎜 🎜🎜
 1 <script type="text/javascript">
 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 </script>
🎜
WSMessage是一个解码编码器
wsmessage是具体的某个定义的proto实例
是一个8位无符号的字节数组
🎜🎜🎜5. 연결 대상 websocket을 사용하여 직렬화된 메시지를 보내고 역직렬화된 메시지를 받습니다🎜🎜🎜🎜
 1 <script type="text/javascript"> 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('<span style="color: blue;">RESPONSE: ' + WSMessage.decode(buf).content + '</span>');36             }37         }38         
 function onError(evt) {39             writeToScreen('<span style="color: red;">ERROR:</span> ' + 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 </script>
🎜🎜 위의 내용은 내 websocket 서버가 하나의 바이너리를 반환하므로 브라우저가 수신하는 것은 blob입니다. 여기에서 blob 처리에 주의하세요🎜🎜🎜🎜🎜6 . 상호 운용성 테스트🎜🎜🎜🎜

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

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