websocket-客户端

Catalogue
  1. 1. @客户端创建
  2. 2. @NewClient 创建客户端
  3. 3. @Close 关闭连接
  4. 4. @Upgrade 升级协议
  5. 5. @push 推送数据
  6. 6. @Recv 获取数据

@客户端创建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package main

import (
"fmt"
"github.com/brewlin/net-protocol/pkg/logging"
"github.com/brewlin/net-protocol/protocol/application/websocket"
)

func init() {
logging.Setup()

}
func main(){
wscli ,_ := websocket.NewClient("http://10.0.2.15:8080/ws")
defer wscli.Close()
//升级 http协议为websocket
if err := wscli.Upgrade();err != nil {
panic(err)
}
//循环接受数据
for {
if err := wscli.Push("test");err != nil {
break
}
data,_ := wscli.Recv()
fmt.Println(data)
}
}
  • 实现了基本的websocket客户端,升级http协议,发送数据,接受数据等方法
  • 依赖tap虚拟网卡,所以需要启动网卡依赖
  • 依赖ARP,TCP,IPV4等协议,所以默认注册了该协议
  • 注意:
    • 1.外网请求需要使用tool/up 方式启动网卡配置数据包转发
    • 2.未实现dns查询域名,必须使用ip测试

@NewClient 创建客户端

构造函数传入url,默认返回一个*Client 指针

1
cli,err := http.NewClient("http://10.0.2.15:8080/ws")

@Close 关闭连接

结束后,需要手动关闭连接,底层进行tcp四次挥手结束两端状态

1
defer wscli.Close()

@Upgrade 升级协议

该方法主要执行两个步骤

    1. 发起http情况,告诉服务端为websocket协议
    1. 对服务端返回的http响应,进行校验,校验通过后保持tcp连接,升级为websocket协议
      1
      2
      //升级 http协议为websocket
      if err := wscli.Upgrade();err != nil {

@push 推送数据

1
wscli.Push("test")

添加数据

@Recv 获取数据

读取该websocket流 接受的数据,本质为tcp流数据,经过websocket协议解包后处理

1
data,_ := wscli.Recv()