Giter Club home page Giter Club logo

netutil's Introduction

项目介绍

netutil是一个简单的Go语言TCP/IP网络编程工具库。

其中的代码和设计思路来源于真有趣团队的《仙侠道》项目。

netutil的目标是为基于消息包的TCP/IP网络应用提供一个稳定高效的通讯层。

基于消息包的TCP/IP网络应用是生活中最常见的一种TCP/IP应用类型,例如:聊天系统、网络游戏等。

但是TCP/IP是面向流的协议,所以基于包的TCP/IP网络应用,通常都有一套自己的消息包分割算法,用于从TCP/IP网络流中分割出一个个独立的消息包。

最常用的算法是在每个消息包的头部安插固定字节数的包长度信息,例如mysql的通讯协议就是这么做的。

netutil用的也是同样的算法,netutil中提供了类似Erlang的{pack: N}的分包协议设置,调用者只需要设置用几个字节存储消息长度,netutil就会按设置进行接收和发送消息包。

netutil还内置了一套经过优化的网关代码,这套网关有以下特性:

  1. 支持分布式部署的多对多结构,一个网关前端可以连接到多个网关后端,一个网关后端可以被多个网关前端连接
  2. 转发消息时不需要重复申请内存和复制数据
  3. 经过优化的广播机制,一个广播只需要在网关之间通讯一次,减少系统调用的同时也降低带宽消耗

网络层作为网络应用的底层,其稳定性是网络应用的重要指标,所以netutil做了比较充分的单元测试来提早发现自身的问题。

我们将这些代码和算法从项目中提取出来的目的,除了方便自己方便大家,也希望在将来netutil能成为一个好用的,并且经过比较多项目验证的,可以让人放心使用的网络编程库。 所以希望大家在使用过程中如果有遇到问题,及早反馈,便于我们改进,同时也欢迎大家贡献代码和想法。

我们团队的邮箱是:realint[at]qq.com

注意事项

netutil中的协议解析部分,为了追求效率,使用了指针操作进行强制类型转换,其原理是先假定进行通讯的两端的CPU使用的都是同样的大小端格式,比如都是小端格式或者都是大端格式。

就目前的实践经验来判断,以及从同行前辈那道听途说,似乎目前已经很难在生产环境和应用环境找到大端格式的设备。

所以这里做了一个比较大胆的假设,假设netutil只部署于小端格式的设备上。

目前已测试可用的部署环境有:Windows、Linux、MaxOS系统 + x86或i686架构CPU的环境。

配套的客户端通讯代码,请注意使用小端格式,例如ActionScript3中的字节流和套接字默认都是是大端格式,需要手工设置成小端格式。

如果您的应用是部署于特殊环境,请谨慎使用netutil。

如果您有把握证明大端格式的设备也很常见,请告诉我们,我们会考虑是否牺牲效率换取通用性。

如何使用

最近项目比较赶,没空写教程,请大家暂时先通过tcp_test.go文件中的代码揣摩用法。目前wiki是开放编辑的,欢迎大家贡献教程文档和示例,谢谢。

netutil's People

Contributors

bg5sbk avatar realint avatar

Stargazers

Tai Feng avatar seabyte7 avatar

Watchers

 avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.