Skip to content

Commit da18ab1

Browse files
committed
up websocket docs
1 parent 0389800 commit da18ab1

File tree

4 files changed

+69
-87
lines changed

4 files changed

+69
-87
lines changed

README.md

+43-5
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,62 @@
1313
相关md文档在cmd目录下,以及相关协议的demo测试
1414
```
1515
`./cmd/*.md`
16-
## @application 应用层
16+
## 一、相关协议进度
17+
### @application 应用层
1718
- [x] http [docs](./cmd/http.md)
1819
- [x] websocket [docs](./cmd/websocket.md)
1920

20-
## @transport 传输层
21+
### @transport 传输层
2122
- [x] tcp [docs](./cmd/tcp.md)
2223
- [x] udp [docs](./cmd/udp.md)
2324
- [x] port 端口机制
2425

25-
## @network 网络层
26+
### @network 网络层
2627
- [x] icmp
2728
- [x] ipv4
2829
- [x] ipv6
2930

30-
## @link 链路层
31+
### @link 链路层
3132
- [x] arp [docs](./cmd/arp.md)
3233
- [x] ethernet
3334

34-
## @物理层
35+
### @物理层
3536
- [x] tun tap 虚拟网卡的实现
3637

38+
## 二、协议相关api
39+
### 1.应用层相关协议
40+
> 应用层暂时只实现了http、websocket、等文本协议。都基于tcp实现,对tcp等进行二次封装
41+
42+
[`http`](./cmd/http.md):
43+
```
44+
//新建一个初始化server,(底层 会创建一个tap网卡并注册 路由,arp缓存等),初始化端口机制,添加9502到端口表
45+
serv := http.NewHTTP("tap1", "192.168.1.0/24", "192.168.1.1", "9502")
46+
//添加路由,当对应请求到来时,分发到自定义回调函数中处理
47+
serv.HandleFunc("/", func(request *http.Request, response *http.Response)
48+
//赋值给将要发送响应给客户端的 buf
49+
Response.End("string");
50+
//启动监听网卡、启动tcp、启动dispatch 分发事件并阻塞 等待client连接。。
51+
serv.ListenAndServ()
52+
```
53+
[`websocket`](./cmd/websocket):初始化阶段和`httpserver`一致、新建httpserver、设置路由、启动监听服务
54+
```
55+
// r *http.Request, w *http.Response
56+
// Upgrade 为校验websocket协议, 并将http协议升级为websocket协议。并接管http协议流程,直接进行tcp通讯保持连接,
57+
c, err := websocket.Upgrade(r, w)
58+
59+
//循环处理数据,接受数据,然后返回
60+
for {
61+
//读取客户端数据,该方法一直阻塞直到收到客户端数据,会触发通道取消阻塞
62+
message, err := c.ReadData()
63+
//发送数据给客户端,封装包头包体,调用tcpWrite 封装tcp包头,写入网络层 封装ip包头、写入链路层 封装以太网包头、写入网卡
64+
c.SendData([]byte("hello"))
65+
}
66+
```
67+
68+
### 2.传输层相关协议
69+
tcp
70+
71+
udp
72+
73+
port端口机制
74+

cmd/application/static/ws.html

-76
This file was deleted.

cmd/websocket.md

+26-6
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,39 @@ sudo ./websocket
1212
```
1313
## @websocketserver.go
1414
```
15+
package main
16+
17+
import (
18+
"fmt"
19+
"log"
20+
21+
"github.com/brewlin/net-protocol/pkg/logging"
22+
"github.com/brewlin/net-protocol/protocol/application/http"
23+
"github.com/brewlin/net-protocol/protocol/application/websocket"
24+
)
25+
26+
func init() {
27+
logging.Setup()
28+
}
1529
func main() {
1630
serv := http.NewHTTP("tap1", "192.168.1.0/24", "192.168.1.1", "9502")
17-
serv.HandleFunc("/websocket", echo)
31+
serv.HandleFunc("/ws", echo)
1832
1933
serv.HandleFunc("/", func(request *http.Request, response *http.Response) {
2034
response.End("hello")
2135
})
36+
fmt.Println("@main: server is start ip:192.168.1.1 port:9502 ")
2237
serv.ListenAndServ()
2338
}
2439
2540
//websocket处理器
2641
func echo(r *http.Request, w *http.Response) {
27-
//协议升级
42+
fmt.Println("got http request ; start to upgrade websocket protocol....")
43+
//协议升级 c *websocket.Conn
2844
c, err := websocket.Upgrade(r, w)
2945
if err != nil {
30-
log.Print("Upgrade error:", err)
46+
//升级协议失败,直接return 交由http处理响应
47+
fmt.Println("Upgrade error:", err)
3148
return
3249
}
3350
defer c.Close()
@@ -38,9 +55,12 @@ func echo(r *http.Request, w *http.Response) {
3855
log.Println("read:", err)
3956
break
4057
}
41-
log.Printf("recv:%s", message)
42-
c.SendData(message)
58+
fmt.Println("recv client msg:", string(message))
59+
// c.SendData(message )
60+
c.SendData([]byte("hello"))
4361
}
4462
}
4563
46-
```
64+
```
65+
## demo
66+
![](/resource/websocket.png)

resource/websocket.png

880 KB
Loading

0 commit comments

Comments
 (0)