- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我目前正在尝试使用 websockets 进行通信,我的代码如下(我使用的是 gorilla )
buff := bytes.NewBuffer([]byte{})
binary.Write(buff, binary.LittleEndian, uint64(1))
binary.Write(buff, binary.LittleEndian, len(message))
binary.Write(buff, binary.LittleEndian, message)
client.Write <- buff.Bytes()
c.Write channel 在一个 for select 循环中
case msg := <-client.Write:
buffer := &bytes.Buffer{}
err := binary.Write(buffer, binary.LittleEndian, msg)
if err != nil {
return
}
err = client.Ws.WriteMessage(websocket.BinaryMessage, buffer.Bytes())
if err != nil {
return
}
buffer.Reset()
客户端只是一个结构体
type Client struct {
Ws *websocket.Conn
Read chan []byte
Write chan []byte
Account *models.Account
}
消息发送成功,我是这样看的
b, err := conn.Read(buff)
if err != nil {
utils.Log("Error while reading from socket " + err.Error())
return
}
buffer := bytes.NewBuffer(buff[:b])
t, err := binary.ReadUvarint(buffer)
utils.Log(t)
if err != nil {
utils.Log("Error while reading from socket " + err.Error())
return
}
switch t {
case 1:
roomsLen, err := binary.ReadUvarint(buffer)
if err != nil {
utils.Log("Error while reading rooms len " + err.Error())
return
}
utils.Log(roomsLen)
roomsBytes := make([]byte, roomsLen)
binary.Read(buffer, binary.LittleEndian, roomsBytes)
rooms := []*Room{}
err = json.Unmarshal(roomsBytes, rooms)
if err != nil {
utils.Log("Error while unmarshaling room list " + err.Error())
return
}
utils.Log(rooms)
utils.Log函数就是这个
func Log(msg interface{}) {
n := time.Now()
console.Call("log", fmt.Sprintf("[%v:%v:%v] %v", n.Hour(), n.Minute(), n.Second(), msg))
}
事情是第一个 uint64 是我正在等待的那个 (1) 但第二个 uint64 im 读数总是 0 而登录它 (len(message)) 给我 52
因为它总是 0 我不能正确解码它
所以我不确定我做错了什么,或者这是否不是使用 websockets 的正确方法。
最佳答案
小错误。您正在编写 uint64,但使用“ReadUvarint”来读取它(varint 是一种不同类型的数据)。
package main
import (
"bytes"
"encoding/binary"
"fmt"
)
func main() {
b := bytes.NewBuffer([]byte{})
e1 := binary.Write(b, binary.LittleEndian, uint64(10))
e2 := binary.Write(b, binary.LittleEndian, uint64(20))
fmt.Println("writing 10 and 20", e1, e2)
{
r := bytes.NewBuffer(b.Bytes())
res, e := binary.ReadUvarint(r)
res2, e2 := binary.ReadUvarint(r)
fmt.Println("using readuvarint here :", res, res2, e, e2, b.Bytes())
}
{
r := bytes.NewBuffer(b.Bytes())
var res, res2 uint64
e := binary.Read(r, binary.LittleEndian, &res)
e2 := binary.Read(r, binary.LittleEndian, &res2)
fmt.Println("using read into uint64's here :", res, res2, e, e2, b.Bytes())
}
}
关于Go websockets 数据 gopherjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36852000/
我目前正在尝试使用 websockets 进行通信,我的代码如下(我使用的是 gorilla ) buff := bytes.NewBuffer([]byte{}) binary.Write(buff
为什么下面的代码会出现死锁?我正在尝试将 goroutine 中的某些内容返回到外部 package main import ( "fmt" "syscall/js" "tim
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 5 年前。 Improve
在运行 gopherjs test 时,是否有一种简单的方法来包含 jquery.js 以用于测试和被测代码? 我目前正在从我的 index.html 中的 CDN 加载 jquery,但如果允许我包
我用 Go 编写了一个简单的包,并使用 gopherJS 进行了编译。 然后我通过 将它包含在我的 HTML 中 已加载,一切正常。但是我不确定如何重用在我自己的 javascript 中的一个包中
我正在尝试使用 GopherJS,但找不到有关如何使用它的文档。 这是 Go 代码: package main import ( "github.com/gopherjs/gopherjs/j
我是一名优秀的程序员,十分优秀!