GithubHelp home page GithubHelp logo

invxp / brink Goto Github PK

View Code? Open in Web Editor NEW
85.0 11.0 51.0 4.05 MB

基于boost::asio的server,简洁,高效

License: GNU General Public License v2.0

Shell 5.54% Vim Script 0.03% Emacs Lisp 0.06% Java 12.68% Makefile 4.16% C++ 65.98% Python 7.33% Protocol Buffer 3.56% CMake 0.15% HTML 0.01% M4 0.37% Objective-C 0.02% C 0.08% Batchfile 0.03%

brink's Introduction

BrinK

基于boost::asio的网络socket服务端

一直以来,我们总是纠结网络服务器开发模型、线程、效率、优化等等

相对比较好一点的理论上大的概念都知道Win下使用IOCP、Linux下使用epoll

boost::asio的出现,解决跨平台异步io接口模型不统一等等的这些问题

但是随之问题也出现:asio在使用和学习过程中相对还是有一些使用上的门槛和“坑”

虽说官网上的examples也不少,但是真正能用在“产品”上的几乎寥寥,大家也是在某一个点上进行探讨而不是全局的设计等等

因为涉及的东西真的是千千万万,比如为什么要用到shared_ptr?什么时候要用deadline_timer?还要补习网络协议相关方面的知识

如何优雅的关闭socket?如何维护一个堆栈来规避内存开销和应用层上层线程池逻辑调用?raw_socket、strand、work、timer和io_service各个的关系又是什么?它们有什么使用规则?

头疼的是asio线程间的各种关系,什么时候应该同步,什么时候应该异步等等,asio::async_xxx和raw_socket->async_xxx有什么使用上的注意事项和细节等等

如何处理包序?如何收到预期?如果不够或多了、丢了又该怎么办?

投递read和write的时序?投递多个会怎么样?出错了又会怎么样?超时该如何做?如何安全的shutdown server?

c++0x的部分特性不理解怎么办?如何不是为了用而用?等等等等。。。

回答:

尽在BrinK!

首先:为什么要开源?其实是一种精神,或者一种信仰

感谢能看到这里的各位,其实开源主要是沟通交流和相互学习、能力提升的一种过程

一个好的开发者,并不是偏执而高高在上、不愿意接受新鲜事物的,而是以抱着永远学习和谦虚的态度去做事情,只有这样,才会进步、我想做人也是这个道理

简单的介绍一个这个所谓的“项目”

前面也说到了,BrinK是个基于boost::asio的网络服务端,可能大家都有这个疑问:它具体都能干什么呢?有何优势?我为什么要选用你?

首先、它在使用功能上比较简单,懂网络协议的应该知道,接口上分别有:握手、收、发、出错、超时,在外层看来,它只是一个简单的server

它有什么优势?说实话我也不知道它有什么优势或亮点,也许我本人并不认为它有什么优势,虽然没有优势,但是它使用的东西可不少

BrinK设计理念是分层级的,最下层是raw_tcp/udp,只处理最基本的业务逻辑

整个服务器框架上使用了对象池来做资源伪回收管理,并通过一个线程池来保证同步和“非阻塞“处理

你可以从该项目中学习到的技术点至少有:

1:线程池/对象池原理和机制、资源回收等

2:较良好的C++命名规范和编码规范

3:一些第三方库使用

4:lambda一些技巧和一些C++11使用上的经验

5:同步/异步/资源竞争/调度问题

6:回调函数

7:网络协议相关知识

8:框架方面的知识

image

非常欢迎任何对此“项目”感兴趣的人投入参与进来,如果你对它感兴趣,那么就加入吧!

如果你发现了有实现不好的地方或者更好的解决方法,请大胆提出,任何形式的BUG或合理的意见建议都会被吸收

目前开发者:

InvXp(我自己)

使用方法:

用vs2013打开sln工程文件编译即可

test文件下为测试客户端

测试: 均由成千上万个Client连接

服务器通过7x24死连接超时测试 服务器通过7x24开关测试 服务器通过7x24收、发、握手、出错测试

目前功能:tcp支持较完整

udp未全部实现,只有框架

TODO也有一些详细的计划

brink's People

Contributors

invxp avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

brink's Issues

brink in linux

学习中。在linux下无法工作。 有在linux下支持的计划吗?

socket:param内部如何访问tcp_server的clients_pool_

首先谢谢你的代码,从你的代码我学到了好多东西
在param内部处理好多逻辑其中就有一项遍历client_pool_里的已经连接的客户端,然后对于做一个操作(例如:free_client等),这样该如何解决?有什么好的解决方案?

超时处理

你好,最近刚准备研究ASIO,偶然看到你写的服务器觉得挺不错。我想问一下这个服务器是如何处理超时的。用Socket测试工具进行测试,只要不发送数据就立马断开连接,看了一下源码设定了3秒的超时处理。实际的应用中应该不可能一直发送数据吧,3秒的超时处理会不会有点短了。谢了

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.