2016-12-25 202 views
1

我有应用程序客户端(JavaScript) - 服务器(golang),它们之间的连接都遍布websocket。我计划使用二进制消息,我想创建自己的消息传递协议,如在此页protocolGolang:处理二进制数据

我已经通过使用DataView而不是在golang中找到了javascript。事件的基本数据类型是相似的,如他们有int8,uint8,int16,uint16等,我无法弄清楚。

这是消息框:

1  Uint8  opcode 
2  Uint16  msg 

这是JavaScript代码处理与上述消息帧传入消息形式的WebSocket的例子:

websocket.onmessage = function(evt) { 
    var data = new DataView(evt.data); 
    var opcode = data.getUint8(0); 
    var msg = data.getUint16(1); 
} 

你能告诉我该怎么办呢在golang?我正在使用gorilla websocket。我知道读取的消息在[]byte,但我不知道如何切片它像javascript与DataView。

谢谢

+0

我建议你使用[的Protobuf(https://developers.google.com/protocol-buffers/docs/gotutorial)或只是[JSON(HTTP:// WWW。 json.org/) –

+0

感谢您的建议,我之前已经使用JSON来做到这一点,但现在是优化阶段,所以我需要切换到二进制数据。我想用JavaScript中的原始二进制数据解决方案,例如我的示例。 – billyzaelani

+0

适合使用Flat Buffers https://google.github.io/flatbuffers/flatbuffers_guide_use_go.html –

回答

0

对于uint16你需要二进制包。仔细检查LittleEndian是否是你想要的。

package main 

import (
    "encoding/binary" 
) 

func main() { 
    a := []byte("yak") 

    /* opcode */ _ = uint8(a[0]) 
    /* message */ _ = binary.LittleEndian.Uint16(a[1:3]) 
} 

https://play.golang.org/p/HRu7C5h2a5