[视频分享]适合学习 golang 非常不错的 tcp 服务器框架-(从 0 开始搭建) - V2EX
如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
solana
sanbenweiyang

[视频分享]适合学习 golang 非常不错的 tcp 服务器框架-(从 0 开始搭建)

  •  
  •   sanbenweiyang Jun 3, 2019 21751 views
    This topic created in 2553 days ago, the information mentioned may be changed or developed.

    Zinx

    zinx 源代码

    https://github.com/aceld/zinx

    视频获取方式:

    评论里留下邮箱[担心爬虫,可以用 base64 加密],每天晚上 /早上我争取把视频发过去 -_-! (希望有妹子哈~~)。

    视频列表:

    001-zinx 课程简介.wmv

    002-基于 zinx 框架的服务器应用演示.wmv

    003-zinxV0.1-基础 server 模块定义.wmv

    004-zinxV0.1基础 server 模块启动实现.wmv

    005-zinxV0.1-开发服务器应用.wmv

    006-zinxV0.2-链接模块的封装(方法与属性).wmv

    007-zinxV0.2-链接模块的方法实现.wmv

    008-zinxV0.2-server 与 connection 的集成.wmv

    009-zinxV0.3-Request 请求消息的封装定义.wmv

    010-zinxV0.3-Router 模块的定义.wmv

    011-zinxV0.3-框架集成 router 模块.wmv

    012-zinxV0.3-开发服务器应用.wmv

    013-zinxV0.4-添加全局配置模块思路及目标.wmv

    014-zinxV0.4-实现全局配置模块.wmv

    015-zinxV0.4-全局参数的硬代码替换.wmv

    016-ZinxV0.4-开发服务器应用.wmv

    017-zinxV0.5-Message 消息模块定义实现.wmv

    018-zinxV0.5-TCP 粘包问题的解决思路.wmv

    019-zinxV0.5-封包拆包过程实现.wmv

    020-zinxV0.5-封包拆包模块的单元测试.wmv

    021-ZinxV0.5-Zinx 框架集成消息封装机制.wmv

    022-ZinxV0.5-使用 Zinx 框架开发-server 端实现.wmv

    023-ZinxV0.5-使用 Zinx 框架开发-client 端实现.wmv

    024-ZinxV0.6-消息管理模块思路分析.wmv

    025-ZinxV0.6-消息管理模块的定义与实现.wmv

    026-ZinxV0.6-集成消息管理模块思路.wmv

    027-ZinxV0.6-集成消息管理模块实现.wmv

    028-ZinxV0.6-使用 Zinx 框架开发.wmv

    029-ZinxV0.7-读写分离模型思路分析.wmv

    030-ZinxV0.7-读写分离模型实现.wmv

    031-ZinxV0.7-使用 Zinx 框架开发.wmv

    032-ZinxV0.8-开辟任务池限定业务 Gourtine 的意义及流程.wmv

    033-ZinxV0.8-创建消息队列属性和全局配置 worker 工作池数量.wmv

    034-ZinxV0.8-工作池的创建与 Worker 的流程实现.wmv

    035-ZinxV0.8-发送消息队列机制方法实现.wmv

    036-ZinxV0.8-消息队列及工作池机制继承 Zinx 到框架.wmv

    037-ZinxV0.8-使用 zinx 框架开发.wmv

    038-ZinxV0.9-连接管理模块目标分析.wmv

    039-ZinxV0.9-连接管理器的定义实现.wmv

    040-ZinxV0.9-连接管理器与 Server 模块关联.wmv

    041-ZinxV0.9-连接管理器与 Connection 模块关联.wmv

    042-ZinxV0.9-链接管理模块的功能测试.wmv

    043-ZinxV0.9-链接的创建销毁的 Hook 方法顺序.wmv

    044-ZinxV0.9-链接的创建-销毁 Hook 方法实现.wmv

    045-ZinxV0.9-使用 Zinx 框架开发.wmv

    046-ZinxV1.0-链接属性定义及实现.wmv

    047-ZinxV1.0-使用 Zinx 框架开发.wmv

    048-Zinx 服务器应用-MMO 游戏-整体结构介绍.wmv

    049-Zinx 服务器应用-MMO 游戏-AOI 兴趣点的介绍.wmv

    050-Zinx 服务器应用-MMO 游戏-AOI 格子的属性和方法分析.wmv

    051-Zinx 服务器应用-MMO 游戏-AOI 格子类型的代码实现.wmv

    052-Zinx 服务器应用-MMO 游戏-AOI 区域管理模块的属性和方法分析.wmv

    053-Zinx 服务器应用-MMO 游戏-AOI 区域管理膜的初始化与打印方法实现.wmv

    054-Zinx 服务器应用-MMO 游戏-AOI 区域管理模块初始化单元测试.wmv

    055-Zinx 服务器应用-MMO 游戏-AOI 区域的一些计算方法.wmv

    056-Zinx 服务器应用-MMO 游戏-根据格子 ID 得到九宫格格子信息.wmv

    057-Zinx 服务器应用-MMO 游戏-九宫格信息获取单元测试.wmv

    058-Zinx 服务器应用-MMO 游戏-通过坐标得到周边九宫格的全部玩家坐标集合.wmv

    059-Zinx 服务器应用-MMO 游戏-AOI 管理模块的针对 Player 的添加删除查询实现.wmv

    060-Zinx 服务器应用-MMO 游戏-protobuf 简介-与 json-xml 的对比.wmv

    061-Zinx 服务器应用-MMO 游戏-protocol_buffer 的环境配置.wmv

    062-Zinx 服务器应用-MMO 游戏-protocol_buffer 语法快速理解.wmv

    063-Zinx 服务器应用-MMO 游戏-protobuf 的编译步骤.wmv

    064-Zinx 服务器应用-MMO 游戏-protobuf 协议编程.wmv

    065-Zinx 服务器应用-MMO 游戏-protobuf 协议编程流程总结.wmv

    066-Zinx 服务器应用-MMO 游戏-游戏 proto3 协议介绍.wmv

    067-Zinx 服务器应用-MMO 游戏-服务器项目构建.wmv

    068-Zinx 服务器应用-MMO 游戏-玩家上线业务分析及步骤.wmv

    069-Zinx 服务器应用-MMO 游戏-玩家上线 proto 协议生成.wmv

    070-Zinx 服务器应用-MMO 游戏-玩家 Player 模块定义.wmv

    071-Zinx 服务器应用-MMO 游戏-玩家上线功能测试与 Zinx 框架 bug 修复.wmv

    072-Zinx 服务器应用-MMO 游戏-上线业务的实现.wmv

    073-Zinx 服务器应用-MMO 游戏-世界聊天 proto 协议生成.wmv

    074-Zinx 服务器应用-MMO 游戏-世界管理模块属性方法分析.wmv

    075-Zinx 服务器应用-MMO 游戏-世界管理模块实现.wmv

    076-Zinx 服务器应用-MMO 游戏-玩家上线添加到世界管理模块.wmv

    077-Zinx 服务器应用-MMO 游戏-世界聊天了路由业务注册和业务实现.wmv

    078-Zinx 服务器应用-MMO 游戏-玩家的广播聊天方法实现.wmv

    079-Zinx 服务器应用-MMO 游戏-世界聊天测试.wmv

    080-Zinx 服务器应用-MMO 游戏-同步上线玩家位置广播思路分析.wmv

    081-Zinx 服务器应用-MMO 游戏-让周围玩家显示当前玩家.wmv

    082-Zinx 服务器应用-MMO 游戏-测试周围玩家显示自己.wmv

    083-Zinx 服务器应用-MMO 游戏-实现当前玩家显示周边玩家位置信息.wmv

    084-Zinx 服务器应用-MMO 游戏-测试当前玩家显示周围玩家位置信息.wmv

    085-Zinx 服务器应用-MMO 游戏-玩家移动过程实现.wmv

    086-Zinx 服务器应用-MMO 游戏-玩家移动信息的广播实现.wmv

    087-Zinx 服务器应用-MMO 游戏-玩家移动广播测试.wmv

    089-Zinx 服务器应用-MMO 游戏-玩家下线业务分析.wmv

    090-Zinx 服务器应用-MMO 游戏-玩家下线业务的实现.wmv

    091-Zinx 服务器应用-MMO 游戏-玩家下线业务的测试.wmv

    092-Zinx 服务器课程总结.wmv


    License Gitter ![zinx 详细教程]( https://img.shields.io/badge/zinx 详细教程-简书-red.svg) zinx 原创书籍下载

    Zinx 是一个基于 Golang 的轻量级并发服务器框架

    开发者


    zinx(C++版本)

    开发者


    一、写在前面

    我们为什么要做 Zinx,Golang 目前在服务器的应用框架很多,但是应用在游戏领域或者其他长链接的领域的轻量级企业框架甚少。

    设计 Zinx 的目的是我们可以通过 Zinx 框架来了解基于 Golang 编写一个 TCP 服务器的整体轮廓,让更多的 Golang 爱好者能深入浅出的去学习和认识这个领域。

    Zinx 框架的项目制作采用编码和学习教程同步进行,将开发的全部递进和迭代思维带入教程中,而不是一下子给大家一个非常完整的框架去学习,让很多人一头雾水,不知道该如何学起。

    教程会一个版本一个版本迭代,每个版本的添加功能都是微小的,让一个服务框架小白,循序渐进的曲线方式了解服务器框架的领域。

    当然,最后希望 Zinx 会有更多的人加入,给我们提出宝贵的意见,让 Zinx 成为真正的解决企业的服务器框架!在此感谢您的关注!

    二、初探 Zinx 架构

    1-Zinx 框架.png

    zinx-start.gif

    三、Zinx 详细教程(代码教程同步更新)

    《 Zinx 框架教程-基于 Golang 的轻量级并发服务器》

    四、Zinx 开发 API 文档

    快速开始

    server

    基于 Zinx 框架开发的服务器应用,主函数步骤比较精简,最多主需要 3 步即可。

    1. 创建 server 句柄
    2. 配置自定义路由及业务
    3. 启动服务
    func main() { //1 创建一个 server 句柄 s := znet.NewServer() //2 配置路由 s.AddRouter(0, &PingRouter{}) //3 开启服务 s.Serve() } 

    其中自定义路由及业务配置方式如下:

    import ( "fmt" "zinx/ziface" "zinx/znet" ) //ping test 自定义路由 type PingRouter struct { znet.BaseRouter } //Ping Handle func (this *PingRouter) Handle(request ziface.IRequest) { //先读取客户端的数据 fmt.Println("recv from client : msgId=", request.GetMsgID(), ", data=", string(request.GetData())) //再回写 ping...ping...ping err := request.GetConnection().SendBuffMsg(0, []byte("ping...ping...ping")) if err != nil { fmt.Println(err) } } 

    client

    Zinx 的消息处理采用,[MsgLength]|[MsgID]|[Data]的封包格式

    package main import ( "fmt" "io" "net" "time" "zinx/znet" ) /* 模拟客户端 */ func main() { fmt.Println("Client Test ... start") //3 秒之后发起测试请求,给服务端开启服务的机会 time.Sleep(3 * time.Second) conn,err := net.Dial("tcp", "127.0.0.1:7777") if err != nil { fmt.Println("client start err, exit!") return } for n := 3; n >= 0; n-- { //发封包 message 消息 dp := znet.NewDataPack() msg, _ := dp.Pack(znet.NewMsgPackage(0,[]byte("Zinx Client Test Message"))) _, err := conn.Write(msg) if err !=nil { fmt.Println("write error err ", err) return } //先读出流中的 head 部分 headData := make([]byte, dp.GetHeadLen()) _, err = io.ReadFull(conn, headData) //ReadFull 会把 msg 填充满为止 if err != nil { fmt.Println("read head error") break } //将 headData 字节流 拆包到 msg 中 msgHead, err := dp.Unpack(headData) if err != nil { fmt.Println("server unpack err:", err) return } if msgHead.GetDataLen() > 0 { //msg 是有 data 数据的,需要再次读取 data 数据 msg := msgHead.(*znet.Message) msg.Data = make([]byte, msg.GetDataLen()) //根据 dataLen 从 io 中读取字节流 _, err := io.ReadFull(conn, msg.Data) if err != nil { fmt.Println("server unpack data err:", err) return } fmt.Println("==> Recv Msg: ID=", msg.Id, ", len=", msg.DataLen, ", data=", string(msg.Data)) } time.Sleep(1*time.Second) } } 

    Zinx 配置文件

    { "Name":"zinx v-0.10 demoApp", "Host":"127.0.0.1", "TcpPort":7777, "MaxConn":3, "WorkerPoolSize":10, "LogDir": "./mylog", "LogFile":"zinx.log" } 

    Name:服务器应用名称

    Host:服务器 IP

    TcpPort:服务器监听端口

    MaxConn:允许的客户端链接最大数量

    WorkerPoolSize:工作任务池最大工作 Goroutine 数量

    LogDir: 日志文件夹

    LogFile: 日志文件名称(如果不提供,则日志信息打印到 Stderr)

    I.服务器模块 Server

     func NewServer () ziface.IServer 

    创建一个 Zinx 服务器句柄,该句柄作为当前服务器应用程序的主枢纽,包括如下功能:

    1)开启服务

     func (s *Server) Start() 

    2)停止服务

     func (s *Server) Stop() 

    3)运行服务

     func (s *Server) Serve() 

    4)注册路由

    func (s *Server) AddRouter (msgId uint32, router ziface.IRouter) 

    5)注册链接创建 Hook 函数

    func (s *Server) SetOnConnStart(hookFunc func (ziface.IConnection)) 

    6)注册链接销毁 Hook 函数

    func (s *Server) SetOnConnStop(hookFunc func (ziface.IConnection)) 

    II.路由模块

    //实现 router 时,先嵌入这个基类,然后根据需要对这个基类的方法进行重写 type BaseRouter struct {} //这里之所以 BaseRouter 的方法都为空, // 是因为有的 Router 不希望有 PreHandle 或 PostHandle // 所以 Router 全部继承 BaseRouter 的好处是,不需要实现 PreHandle 和 PostHandle 也可以实例化 func (br *BaseRouter)PreHandle(req ziface.IRequest){} func (br *BaseRouter)Handle(req ziface.IRequest){} func (br *BaseRouter)PostHandle(req ziface.IRequest){} 

    III.链接模块

    1)获取原始的 socket TCPConn

     func (c *Connection) GetTCPConnection() *net.TCPConn 

    2)获取链接 ID

     func (c *Connection) GetConnID() uint32 

    3)获取远程客户端地址信息

     func (c *Connection) RemoteAddr() net.Addr 

    4)发送消息

     func (c *Connection) SendMsg(msgId uint32, data []byte) error func (c *Connection) SendBuffMsg(msgId uint32, data []byte) error 

    5)链接属性

    //设置链接属性 func (c *Connection) SetProperty(key string, value interface{}) //获取链接属性 func (c *Connection) GetProperty(key string) (interface{}, error) //移除链接属性 func (c *Connection) RemoveProperty(key string) 

    关于作者:

    作者:Aceld(刘丹冰) 简书号:IT 无崖子

    mail: [email protected] github: https://github.com/aceld 原创书籍 gitbook: http://legacy.gitbook.com/@aceld

    Zinx 技术讨论社区

    QQ 技术讨论群: 135991862

    视频获取方式:

    评论里留下邮箱[担心爬虫,可以用 base64 加密],每天晚上 /早上我争取把视频发过去 -_-! (希望有妹子哈~~)。

    496 replies    2019-10-08 17:55:26 +08:00
    1  2  3  4  5  
    Mephisto233
        1
    Mephisto233  
       Jun 3, 2019
    邮箱:eGllemVmdUBnbWFpbC5jb20=
    感谢楼主分享!
    max911
        2
    max911  
       Jun 3, 2019
    邮箱:NDA4NjU3OTk0QHFxLmNvbQ==
    保持一个学习的心
    cc3630
        3
    cc3630  
       Jun 3, 2019
    邮箱 ODA1MjQxNjEwQHFxLmNvbQ==
    感谢大佬分享
    xiongshengyao
        4
    xiongshengyao  
       Jun 3, 2019
    邮箱:eGlvbmdzaGVuZ3lhb0Bob3RtYWlsLmNvbQ==
    感谢分享,希望学习后能参与进后续开发~
    hailiang88
        5
    hailiang88  
       Jun 3, 2019
    email: Njc2NzA4NDE1QHFxLmNvbQ==
    感谢分享
    darcylee1998
        6
    darcylee1998  
       Jun 3, 2019
    邮箱: NjI0NTg0NDM1QHFxLmNvbQ==
    十分感谢。
    sanbenweiyang
        7
    sanbenweiyang  
    OP
       Jun 3, 2019
    @Mephisto233
    @max911
    @cc3630
    @xiongshengyao
    @hailiang88

    已发,清查数!
    sanbenweiyang
        8
    sanbenweiyang  
    OP
       Jun 3, 2019
    @darcylee1998 已发,清查数!
    haoji
        9
    haoji  
       Jun 3, 2019
    bXJoYW9qaUBnbWFpbC5jb20=

    感谢分享!
    v1v
        10
    v1v  
       Jun 3, 2019
    NTk1MjI4MjI5QHFxLmNvbQ== 已 star
    Luge
        11
    Luge  
       Jun 3, 2019
    邮箱:Nzk0MTcwNjI1QHFxLmNvbQ==
    感谢分享!
    xiaofengchen
        12
    xiaofengchen  
       Jun 3, 2019
    eGllX2NhbmdAMTYzLmNvbQ==
    感谢分享!
    Youngda
        13
    Youngda  
       Jun 3, 2019
    邮箱:MTIxNzg4MjgwMEBxcS5jb20=
    感谢分享,学习一下
    rumors
        14
    rumors  
       Jun 3, 2019
    ODk3MTY1OTAyQHFxLmNvbQ== 感谢分享
    ghos
        15
    ghos  
       Jun 3, 2019
    邮箱:Z2hvc2xpbjAxQGdtYWlsLmNvbQ==
    感谢分享!
    0x000007b
        16
    0x000007b  
       Jun 3, 2019
    andrewTeller
        17
    andrewTeller  
       Jun 3, 2019
    NzgwODU2NzUzQHFxLmNvbQ==
    多谢大佬
    JimmyTinsley
        18
    JimmyTinsley  
       Jun 3, 2019
    bGl1amllMzMzMzMzQGdtYWlsLmNvbQ==
    谢谢楼主
    CrazyDudo
        19
    CrazyDudo  
       Jun 3, 2019
    邮箱:NTA2NzE4MTczQHFxLmNvbQ==
    感谢分享
    chauncyLiu
        20
    chauncyLiu  
       Jun 3, 2019
    NjY0OTEzNjc2QHFxLmNvbQ==
    感谢大佬!
    xieren58
        21
    xieren58  
       Jun 3, 2019
    eGllcmVuNThAZ21haWwuY29t
    谢谢
    HanSonJ
        22
    HanSonJ  
       Jun 3, 2019
    aEBoYW5jLmNj
    感谢分享
    joooooker21
        23
    joooooker21  
       Jun 3, 2019
    MTIxNjA1NTg5MEBxcS5jb20=
    谢谢!
    a67793581
        24
    a67793581  
       Jun 3, 2019
    Mjg0NDc0MTAyQHFxLmNvbQ==
    感谢分享
    grzhan
        25
    grzhan  
       Jun 3, 2019
    ZW52eTUxOEBnbWFpbC5jb20=
    Otho
        26
    Otho  
       Jun 3, 2019
    邮箱 dGlueW5vcnRoN0BnbWFpbC5jb20=
    感谢分享
    YeGuli
        27
    YeGuli  
       Jun 3, 2019
    邮箱:enpibGpoMTIzQGxpdmUuY29t
    感谢楼主分享
    demonkit
        28
    demonkit  
       Jun 3, 2019
    邮箱:eXlkZW1vbmtpdEBnbWFpbC5jb20=

    感谢,已 star
    lhwarthas
        29
    lhwarthas  
       Jun 3, 2019
    邮箱:bGh3YXJ0aGFzQGdtYWlsLmNvbQ==
    感谢分享!
    fank99
        30
    fank99  
       Jun 3, 2019
    邮箱:MjQ2NDUxMjQ0NkBxcS5jb20=
    感谢楼主分享,已 star
    setsunakute
        31
    setsunakute  
       Jun 3, 2019
    OTI0MDY0MjIyQHFxLmNvbQ==
    感谢分享
    Jason0803
        32
    Jason0803  
       Jun 3, 2019
    MTUzMzgyMTU2MTVAMTYzLmNvbQ==
    WEIJIALU
        33
    WEIJIALU  
       Jun 3, 2019
    邮箱: [email protected]
    感谢楼主分享
    collector
        34
    collector  
       Jun 3, 2019
    邮箱:d2FuZ3M4NThAMTYzLmNvbQ==

    感谢分享
    ophark
        35
    ophark  
       Jun 3, 2019
    Y3B0YnRwdHBiY3B0ZHRwdHAxOTk0MDkyMUBnbWFpbC5jb20=

    谢谢分享
    kkk1994
        36
    kkk1994  
       Jun 3, 2019 via Android
    感谢,Nzg2NDY2MjE2QHFxLmNvbQ==
    DJI360
        37
    DJI360  
       Jun 3, 2019 via Android
    MzY0NzQwNzk5QHFxLmNvbQ==
    感谢楼主
    admirez
        38
    admirez  
       Jun 3, 2019
    邮箱 : b3VyZmVhckAxNjMuY29t
    感谢楼主分享
    sanbenweiyang
        40
    sanbenweiyang  
    OP
       Jun 3, 2019
    @admirez 已发,清查数!
    antic
        41
    antic  
       Jun 3, 2019
    邮箱:YW50aWMuemh1QGdtYWlsLmNvbQ==
    感谢大佬分享
    Mark3K
        42
    Mark3K  
       Jun 3, 2019
    Ymx1ZW1hcmtAMTI2LmNvbQo=
    谢谢
    merlin9527
        43
    merlin9527  
       Jun 3, 2019
    邮箱:NDQ1MDQyMDEyQHFxLmNvbQ==
    感谢楼主分享!
    DJI360
        44
    DJI360  
       Jun 3, 2019 via Android
    @sanbenweiyang 收到了,感谢
    Ruohua3kou
        45
    Ruohua3kou  
       Jun 3, 2019
    邮箱:MTEwMTgxMTIxMUBxcS5jb20=
    感谢分享
    maximum2012
        46
    maximum2012  
       Jun 3, 2019
    邮箱:bWF4aW11bTIwMTdAMTYzLmNvbQ==
    感谢楼主分享!
    8Cangtou
        47
    8Cangtou  
       Jun 3, 2019
    邮箱:MzY5MjQ3Nzc0QHFxLmNvbQ==
    感谢楼主分享!
    catoncat
        48
    catoncat  
       Jun 3, 2019
    :Y3JzMDkxMEBpY2xvdWQuY29t
    wyywn1314
        49
    wyywn1314  
       Jun 3, 2019
    laoertongzhi
        50
    laoertongzhi  
       Jun 3, 2019
    邮箱:cWl1XzExMGNoZW5AMTYzLmNvbQ==


    感谢楼主分享
    warlock
        51
    warlock  
       Jun 3, 2019
    MTI5OTk3NDg4NkBxcS5jb20=
    感谢
    nyqmm
        52
    nyqmm  
       Jun 3, 2019
    邮箱: [email protected]
    感谢楼主分享
    B3C933r4qRb1HyrL
        53
    B3C933r4qRb1HyrL  
       Jun 3, 2019
    eHc1NDI3QGdtYWlsLmNvbQ==
    叩谢
    enjoychen0318
        54
    enjoychen0318  
       Jun 3, 2019
    NDY0ODg0MDE1QHFxLmNvbQ==
    感谢楼主分享
    Yinnfeng
        55
    Yinnfeng  
       Jun 3, 2019
    bGltaXRzeTIxN0BnbWFpbC5jb20=
    Yinnfeng
        56
    Yinnfeng  
       Jun 3, 2019
    感谢分享
    ianxb
        57
    ianxb  
       Jun 3, 2019
    eGlhb2JvOTlAMTM5LmNvbQ==
    看看
    userff
        58
    userff  
       Jun 3, 2019
    bXJmaHlAcXEuY29t
    感谢楼主分享
    julypanda
        59
    julypanda  
       Jun 3, 2019
    djJleEB0ZW5wbS5tbA==
    感谢
    wwwyc
        60
    wwwyc  
       Jun 3, 2019
    MjQ0MDA5MDY0QHFxLmNvbQ==
    感谢楼主分享
    zgpgzhangpeng
        61
    zgpgzhangpeng  
       Jun 3, 2019
    NzA0Nzc4NDUwQHFxLmNvbQ==
    谢谢大佬
    lhlhlh111000
        62
    lhlhlh111000  
       Jun 3, 2019
    MTExMzI5MjQxOUBxcS5jb20=
    感谢楼主
    limers
        63
    limers  
       Jun 3, 2019
    NTk0NDQ4NDAzQHFxLmNvbQ==
    谢谢楼主
    Nooooobycat
        64
    Nooooobycat  
       Jun 3, 2019 via Android
    MTYyNTAyNjE4NEBxcS5jb20=
    谢谢楼主
    thisisusername
        65
    thisisusername  
       Jun 3, 2019
    NDU1NTQ3MDc1QHFxLmNvbQ==

    感谢楼主
    passol
        66
    passol  
       Jun 3, 2019
    a2luZ18wLjFAMTYzLmNvbQ==
    感谢楼主分享
    Aura7988
        67
    Aura7988  
       Jun 3, 2019
    MTA5MDM4MzczNEBxcS5jb20K
    baichen99
        68
    baichen99  
       Jun 3, 2019 via iPhone
    感谢楼主分享

    MjI4Nzc3MzgzNEBxcS5jb20=
    Aura7988
        69
    Aura7988  
       Jun 3, 2019
    感谢楼主分享。
    zhangqilin
        70
    zhangqilin  
       Jun 3, 2019
    前一段就收到了 最近正在看
    cyheng
        71
    cyheng  
       Jun 3, 2019
    MTIwNTkxODkzNUBxcS5jb20=
    感谢楼主分享
    wuyunduoduopiao
        72
    wuyunduoduopiao  
       Jun 3, 2019
    MTY0OTI3OTAwQHFxLmNvbQ==
    感谢楼主
    cnbattle
        73
    cnbattle  
       Jun 3, 2019
    Sadow
        74
    Sadow  
       Jun 3, 2019
    d3UxOTkzc29yYUBvdXRsb29rLmNvbQ==
    感谢楼主分享!
    rayless
        75
    rayless  
       Jun 3, 2019
    OTU0NjAzNTQwQHFxLmNvbQo=
    感谢楼主分享
    vN0ZTDFOcL843h2D
        76
    vN0ZTDFOcL843h2D  
       Jun 3, 2019
    Mzg0MzcyNjAyQHFxLmNvbQ==

    谢谢分享
    zeeyoung
        77
    zeeyoung  
       Jun 3, 2019
    NTc2ODA0MDQxQHFxLmNvbQ==
    感谢分享
    luobo
        78
    luobo  
       Jun 3, 2019
    MTI1NDYyNDEzMEBxcS5jb20=
    shawnnano
        79
    shawnnano  
       Jun 3, 2019
    Mzc1MDQzMjYxQHFxLmNvbQ==
    感谢分享
    gowk
        80
    gowk  
       Jun 3, 2019
    dGFsa21vcmVAcXEuY29tCg==
    感谢!
    gosansam
        81
    gosansam  
       Jun 3, 2019
    c2Fuc2FtaG91QGdtYWlsLmNvbQ==
    感谢分享
    daquandiao2
        82
    daquandiao2  
       Jun 3, 2019 via iPhone
    ZGFxdWFuLmRpYW9AZ21haWwuY29t
    guoyu001
        83
    guoyu001  
       Jun 3, 2019 via Android
    MzI5MjU5NTU1NkBxcS5jb20=
    谢谢分享
    allenby
        84
    allenby  
       Jun 3, 2019 via Android
    OTQ2NTkwMjQ5QHFxLmNvbQ==
    感分享!
    jesnridy
        85
    jesnridy  
       Jun 3, 2019
    amVzbnJpZHlAZ21haWwuY29t
    感谢分享
    zjwshisb
        86
    zjwshisb  
       Jun 3, 2019
    MzYxMzQwMjcyQHFxLmNvbQ==
    感谢分享!!
    Cabana
        87
    Cabana  
       Jun 3, 2019
    a2Fubml1QDE2My5jb20=
    感谢分享
    zh826256645
        88
    zh826256645  
       Jun 3, 2019
    ODI2MjU2NjQ1QHFxLmNvbQ==
    感谢分享
    Yien
        89
    Yien  
       Jun 3, 2019 via Android
    eWllbnpodUBnbWFpbC5jb20
    非常感谢
    yifanes
        90
    yifanes  
       Jun 3, 2019
    eWlmYW5lc0BxcS5jb20=
    感谢分享
    atom234
        91
    atom234  
       Jun 3, 2019
    aGV5Y21tLmNuQGdtYWlsLmNvbQ==
    感谢感谢
    JL1990
        92
    JL1990  
       Jun 3, 2019
    YWdlbnQuOTk5dGhAZ21haWwuY29t
    感谢大神,学习学习
    txf
        93
    txf  
       Jun 3, 2019 via Android
    ODA5MzAwNTQ0QHFxLmNvbQ== 谢谢
    wenlongde
        94
    wenlongde  
       Jun 3, 2019
    OTY5NzM3NTAxQHFxLmNvbQ==
    非常感谢
    yangli3502
        95
    yangli3502  
       Jun 3, 2019
    eWFuZ2xpMzUwQDE2My5jb20=
    感谢分享
    gsw945
        96
    gsw945  
       Jun 3, 2019
    Z3N3OTQ1QGZveG1haWwuY29t
    感谢分享
    tanxiaoluo
        97
    tanxiaoluo  
    PRO
       Jun 3, 2019
    十分感谢

    Y3VpdF90YW5AMTYzLmNvbQ==
    KIIROITORI
        98
    KIIROITORI  
       Jun 3, 2019 via Android
    邮箱:
    MjQwMjMyMjg4OUBxcS5jb20=
    感谢大佬分享!
    jxl
        99
    jxl  
       Jun 3, 2019
    bHhqOTkwQGdtYWlsLmNvbQo=
    感谢感谢
    poplar50
        100
    poplar50  
       Jun 3, 2019
    eWFha2lyZUBnbWFpbC5jb20=
    感谢分享
    1  2  3  4  5  
    About     Help     Advertise     Blog     API     FAQ     Solana     1677 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 238ms UTC 16:20 PVG 00:20 LAX 09:20 JFK 12:20
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86