yueqiumao 发布的文章

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

func main() {
    url := "https://api.64clouds.com/v1/getServiceInfo?veid=823669&api_key=private_xt5IHIYNAhuYxkFlvLpCWTGc"
    resp, err := http.Get(url)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()
    var data map[string]interface{}
    err = json.NewDecoder(resp.Body).Decode(&data)
    if err != nil {
        panic(err)
    }

    data_counter, ok := data["data_counter"].(float64)
    if !ok {
        return
    }
    v := data_counter / 1024.0 / 1024.0 / 1024.0
    fmt.Printf("%.2fGB/500.00GB\n", v)
}

./server_linux_amd64 -l :7777 -t localhost:7456 --mode fast3
./client_darwin_amd64 -l :7777 -r yueqiumao.com:7777 --mode fast3

KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。

package main

import (
    kcp "github.com/xtaci/kcp-go"
)

func main() {
    // 服务端
    l, _ := kcp.Listen(":7777")
    c, _ := l.Accept()
    
    // 客户端
    c, _ := kcp.Dial("localhost:7777")
}

其中 l, c 都实现了 net 包中的接口,所以可以很方便的对接现有代码。
kcp 速度快且支持加密,在 socks 的支持下,貌似做一些坏事。

package main

import (
    socks5 "github.com/armon/go-socks5"
)

func main() {
    s, _ := socks5.New(&socks5.Config{})
    s.ListenAndServe("tcp", ":6666")
}

type Context interface {
    Deadline() (deadline time.Time, ok bool)
    Done() <-chan struct{}
    Err() error
    Value(key interface{}) interface{}
}

ctx, cancel := context.WithTimeout(context.Background(), time.Second*3)
<-ctx.Done()

Deadline 返回一个time.Time,表示当前Context应该结束的时间,ok则表示有结束时间
Done 当Context被取消或者超时时候返回的一个close的channel,告诉给context相关的函数要停止当前工作然后返回了。
Err context被取消的原因
Value context实现共享数据存储的地方,是协程安全的