Ich bin derzeit versucht, mit WebSockets und meinem Code zu kommunizieren, ist der folgende (im mit Gorilla)Go WebSockets Daten gopherjs
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()
Der c.Write Kanal seiner Innenseite eines für ausgewählte Schleife
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()
und Client ist nur eine Struktur
type Client struct {
Ws *websocket.Conn
Read chan []byte
Write chan []byte
Account *models.Account
}
Die Nachricht erfolgreich gesendet wird, und ich lese es wie diese
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)
Die utils.Log Funktion ist nur diese
func Log(msg interface{}) {
n := time.Now()
console.Call("log", fmt.Sprintf("[%v:%v:%v] %v", n.Hour(), n.Minute(), n.Second(), msg))
}
Thing ist die erste uint64 das Warten ein im (1), aber der zweite uint64 im Lesen ist immer 0, während loggin es (len (message)) gibt mir 52
und da seine immer 0 ich kann nicht Abstellungs es richtig
Also ich bin nicht sicher, was ich falsch mache oder, wenn dies nicht die richtige Art und Weise WebSockets zu verwenden.