vclyin / golang / Golang TCP Server | DarkSword

分享

   

Golang TCP Server | DarkSword

2018-08-22  vclyin

这两天利用空闲时间用Golang写了个简单的TCP Server.
其实用Golang写TCP Server非常简洁,每来一个连接就分配一个goroutine去处理,对于每个处理Conn的goroutine只负责接收数据,再将分好的数据包丢到缓冲区中交给另外创建的一个goroutine处理,高并发就是这么来的。

每个数据包的组成: 包长 + 类型 + 数据
–> 4字节 + 2字节 + 数据
–> uint32 + uint16 + []byte
数据部分用protobuf封装,protobuf简直太赞了.

心跳机制其实只需要服务器设置读超时,客户端发的任何一个包都可以看做是心跳包,当然为了保证可靠性,客户端还是需要每隔一段时间发送一个PING包的。

测试:
服务器接受了5000个TCP长连接,对于每个连接分别由goroutine处理,每个连接分配1K缓冲区接收数据,当数据大于1K时缓冲区会自动扩容。平均每个连接耗费大概20K内存,总共100M多一点。
一般认为系统底层默认的socket读写缓冲区各8K,当然每个系统的设置不一样,也可以手动更改这个缓冲区大小。
另外golang现在的GC很慢,非常慢,客户端断开连接后,服务器需要等很久才释放socket占用的内存,据说go1.3的GC会大大改进,期待ing。

/************************************************/
经常逛github,但这是第一次上传代码,搜噶,发现世界如此美妙。。。
https://github.com/gansidui/gotcp

转自:http://www.lijieblog.com/?p=4162

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    来自: vclyin > 《golang》

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>