zoukankan      html  css  js  c++  java
  • golang 使用kcp实例

    简介
    kcp的具体概念与定义自行百度,特性可以浓缩为一句话,和tcp一样可靠,速度比tcp快,是一个用带宽换速度的新型协议。
    网上的示例代码很少,特此写一篇golang下的kcp实例。

    PS
    本文仅对ksp在golang下的基本使用进行示例,具体调优参数需要使用者去官网寻找适配。
    官方的示例代码太长太花了,特意简约地贴出最简单的写法
    仓库
    主仓库: https://github.com/xtaci/kcp-go
    示例代码: https://github.com/fwhezfwhez/TestX/tree/master/test_kcp/basic
    一些调优参数的配置: https://github.com/fwhezfwhez/TestX/blob/master/test_kcp/official/server/main.go 195行-323行

    预览
    服务端:
    package main

    import (
    "fmt"
    "github.com/fwhezfwhez/errorx"
    "github.com/xtaci/kcp-go"
    "io"
    "net"
    )

    func main() {
    fmt.Println("kcp listens on 10000")
    lis, err := kcp.ListenWithOptions(":10000", nil, 10, 3)
    if err!=nil {
    panic(err)
    }
    for {
    conn, e :=lis.AcceptKCP()
    if e!=nil {
    panic(e)
    }
    go func(conn net.Conn){
    var buffer = make([]byte,1024,1024)
    for {
    n,e :=conn.Read(buffer)
    if e!=nil {
    if e == io.EOF {
    break
    }
    fmt.Println(errorx.Wrap(e))
    break
    }

    fmt.Println("receive from client:", buffer[:n])
    }
    }(conn)
    }
    }

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    客户端
    package main

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

    func main() {
    kcpconn, err := kcp.DialWithOptions("localhost:10000", nil, 10, 3)
    if err!=nil {
    panic(err)
    }

    kcpconn.Write([]byte("hello kcp.emmmmmmmmmmmmmmm"))
    select {}
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

    该库的kcp服务端不存在拆包问题,客户端连续发送消息 [0,1,2,3,4] [7,8,9],服务端会两次循环(buffer足够大)内读到[0,1,2,3,4,5] [7,8,9] 而不是 [0,1,2,3,4,5,6,7,8,9]
    ————————————————
    版权声明:本文为CSDN博主「fwhezfwhez」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/fwhezfwhez/article/details/89714434

  • 相关阅读:
    h5 百度获取地址
    Vue Cli项目使用PDF.js预览pdf无法访问到viewer.html
    Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead...
    VUE ES6转ES5,(ios 10.2版本,白屏,猜想es6语法原因)
    Vue+element-ui Upload 的http-request自定义上传文件
    vuejs中如何动态拼接生成字段名
    el-cascader 使用
    hdu 3555 数位dp入门
    codeforces Registration system
    hdu 1166 敌兵布阵
  • 原文地址:https://www.cnblogs.com/ExMan/p/11867131.html
Copyright © 2011-2022 走看看