h5学习笔记:小程序websocket 小实验(2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hero82748274/article/details/88730117

在昨晚实验中可以看到websocket 似乎支持二进制发送,这一点不知道是否有坑?大部分情况下,还是先保留一些意见。今晚的内容测试一下ArrayBuffer。

1.改造一下golang 发送包

改造只是改成发送一个二进制数据 32位,4个字节的数据,让小程序去接收。

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"net/http"

	"golang.org/x/net/websocket"
)

func main() {

	http.Handle("/message", websocket.Handler(onMessage))
	err := http.ListenAndServe(":8081", nil)
	if err != nil {
		panic("ListenAndServe: " + err.Error())
	}
}

func onMessage(ws *websocket.Conn) {
	var err error
	for {

		var receivemsg string
		if err = websocket.Message.Receive(ws, &receivemsg); err != nil {
			fmt.Println("can't not receive message")

			break
		}

		if receivemsg != "" {

			if receivemsg == "1001" {
				//使用buffer 去写
				buf := bytes.NewBuffer([]byte{})
				tmp := uint32(10001)
				binary.Write(buf, binary.BigEndian, tmp)

				websocket.Message.Send(ws, buf.Bytes())
			} else {
				websocket.Message.Send(ws, "不存在指令")

			}

		}

	}

}

2.接收golang 发送过来的二进制数据

在小程序里面从文档可以看到支持ArrayBuffer,尝试在客户端先进行一个测试。

    this.socket.onMessage((res)=>{
      console.log("收到消息:"+res.data)
      this.setData({ content: "收到消息:" +res.data})
      var buf = res.data
      console.log("长度" + buf.byteLength)
      var  dataview = new DataView(buf)
      var r = dataview.getUint32();
      console.log("返回结果:"+r);
    })

ArrayBuffer 采用DataView 去解析数据。然后获取后端发送返回的二进制数据。查看下面的图可以看到小程序接收到ArrayBuffer,但这个值不能直接显示。需要进行转换一下。
在这里插入图片描述

从图中可以,返回结果和自己在后端编写的结果可以保持一致。这样可以根据协议来实现更多二进制数据解析。

好,今晚到此为止。

猜你喜欢

转载自blog.csdn.net/hero82748274/article/details/88730117