tcpdaemon —— 特定进程模型下的TCP连接管理

tcpdaemon 详细介绍

tcpdaemon
=========

0.快速开始

老师交给小明一个开发任务,实现一个TCP网络迭代并发服务器,用于回射任何接收到的通讯数据。小明很懒,他在开源中国项目库里搜到了开源库tcpdaemon来帮助他快速完成任务。首先他安装好tcpdaemon,然后写了一个C程序文件test_callback_echo.c

$ vi test_callback_echo.c
    #include "tcpdaemon.h"

    _WINDLL_FUNC int tcpmain( struct TcpdaemonServerEnvirment *p_env , int sock , void *p_addr )
    {
        char    buffer[ 4096 ] ;
        long    len ;

        len = recv( sock , buffer , sizeof(buffer) , 0 ) ;
        if( len <= 0 )
            return len;

        len = send( sock , buffer , len , 0 ) ;
        if( len < 0 )
            return len;

        return 0;
    }

他编译链接成动态库test_callback_echo.so,最后用tcpdaemon直接挂接执行

$ tcpdaemon -m IF -l 0:9527 -s test_callback_echo.so -c 10 --tcp-nodelay --logfile $HOME/log/test_callback_echo.log

OK,总共花了五分钟,圆满完成老师作业。老师说这个太简单了,小明你给我改成像Apache经典的Leader-Follow服务端模型,小明说没问题,他把启动命令参数-m IF改成了-m LF,再次执行,完成老师要求,总共花了五秒钟。老师问你怎么这么快就改好了,小明说全靠开源项目tcpdaemon帮了大忙啊 ^_^

1.概述

tcpdaemon是一个TCP通讯服务端平台/库,它封装了众多常见服务端进程/线程管理和TCP连接管理模型(Forking、Leader-Follow、IO-Multiplex、WindowsThreads Leader-Follow),使用者只需加入TCP通讯数据收发和应用逻辑代码就能快速构建出完整的TCP应用服务器。

服务模型模型说明
Forking : 单进程主守护,每当一条TCP新连接进来后,接受之,创建子进程进入回调函数tcpmain处理之。一条连接对应一个子进程(短生命周期)
Leader-Follow : 单进程管理进程,预先创建一组子进程(长生命周期)并监控其异常重启。子进程等待循环争抢TCP新连接调用回调函数tcpmain处理之
IO-Multiplex : 单进程主守护,IO多路复用等待TCP新连接进来事件、TCP数据到来事件,TCP数据可写事件,调用回调函数tcpmain处理之
WindowsThreads Leader-Follow : 同Leader-Follow,区别在于预先创建一组子线程而非子进程

tcpdaemon提供了三种与使用者代码对接方式:(注意:.exe只是为了说明自己是可执行文件,在UNIX/Linux中可执行文件一般没有扩展名)
回调模式 : tcpdaemon.exe+user.so(tcpmain) | 可执行程序tcpdaemon通过启动命令行参数挂接用户动态库,获得动态库中函数tcpmain指针。当建立TCP连接后 或 IO多路复用模式下当可读可写事件发生时 调用回调函数tcpmain
主调模式 : user.exe(main,tcpmain)+libtcpdaemon.a(tcpdaemon) | 用户可执行程序user.exe隐式链接库libtcpdaemon.a。用户函数main(user.exe)初始化tcpdaemon参数结构体,并设置回调函数tcpmain,调用函数tcpdaemon(libtcpdaemon.so)。当建立TCP连接后 或 IO多路复用模式下当可读可写事件发生时 调用回调函数tcpmain
主调+回调模式 : user.exe(main)+libtcpdaemon.a(tcpdaemon) + user.so(tcpmain) | 同上,区别在于用户函数main不直接设置回调函数tcpmain而设置user.so文件名。函数tcpdaemon负责挂接动态库user.so并获得函数tcpmain指针

一般简单情况下,使用者采用回调模式即可,只要编写一个动态库user.so(内含回调函数tcpmain)被可执行程序tcpdaemon挂接上去运行。如果使用者想订制一些自定义处理,如初始化环境,可以采用主调模式,实现函数main里把自定义参数传递给tcpdaemon穿透给tcpmain。如果想实现运行时选择回调函数tcpmain则可以采用主调+回调模式。

时间: 2024-09-13 08:09:31

tcpdaemon —— 特定进程模型下的TCP连接管理的相关文章

告别繁琐! Vista下快捷方式网络连接管理

有许 多人抱怨说http://www.aliyun.com/zixun/aggregation/15470.html">Vista中进入网络连接管理非常麻烦,没错,如果不熟悉的用户根本就很难找到.因为XP中通过开始菜单就能很方便的进入, 但是到了Vista中,你需要右击系统任务栏中的连接图标->网络共享中> 管理网络连接(左侧面板),如此才能进入. 下面就为大家介绍一个非常简便的进入方式,可以成为一键式.你所需要做的就是创建一个快捷方式: 在桌面新建一个快捷方式,输入: exp

tcpdaemon 更新至 v1.2.1 , TCP 通讯服务端平台/库

1.2.1 2017-06-04 calvin * 修正了服务模型IOMP的多进程没有轮流切换主侦听问题 1.2.0 2017-06-03 calvin * 重整了代码,有少许接口与老版本不兼容 * 新增服务模型IOMP,支持Linux环境 0.快速开始 老师交给小明一个开发任务,实现一个TCP网络迭代并发服务器,用于回射任何接收到的通讯数据.小明很懒,他在开源中国项目库里搜到了开源库tcpdaemon来帮助他快速完成任务.首先他安装好tcpdaemon,然后写了一个C程序文件 test_cal

IIS 6.0进程模型 --asp.net本质

如果Web服务器操作系统是Windows server 2003,则IIS 6.0进程模型是asp.net的默认选择.其名称明确之处,该模型需要IIS 6.0.然后,在windows 2003 的服务器上,仍然可以让asp.net遵守IIS 5.0进程模型的规则.可以通过修改machine.config文件中的<processModel>节,显示的启用该模型. <processModel enable="true"> 当然,我并不建议且滑倒IIS 5.0进程模型

django,性能测试,以及对fastcgi下进程模型和线程模型的分析

/** *作者:张荣华 *日期:2008-11-15 **/ 之前网上有很多关于django的测试,他们的测试结果都表明django在fastcgi模式下,使用线程模型要比进程模型快,而且更稳定,具体文章见:http://irobot.blog.hexun.com/20332312_d.htmlhttp://taoyh163.blog.163.com/blog/static/19580356200802433559850/ 但是ahuaxuan根据操作系统的原理判断结果不应该是这样,理论上来讲,

Apache中并发控制、查看进程数、TCP连接、压缩功能说明

一:apache有关并发控制 主要是 prefork和worker二个其中一个来控制.我们可以使用httpd -l来确定当前使用的MPM是prefork.c,还是Worker.c. # httpd -l Compiled in modules: core.c prefork.c http_core.c mod_so.c 相关的配置在httpd.conf 当中可以找到 二:查看httpd进程数(即prefork模式下Apache能够处理的并发请求数): ps -ef | grep httpd |

tcp-java环境下 组播可以是TCP连接基础上的吗?

问题描述 java环境下 组播可以是TCP连接基础上的吗? 我需要开发一个聊天室的案例 但是文本的传输需要可靠的TCP连接 但是我不知道java中是否有能实现基于TCP连接的组播方式? 解决方案 http://general.blog.51cto.com/927298/287496/

linux下2个检查tcp连接的命令_linux shell

1 检测web服务器的链接数量及状态: netstat -ant|awk '{print $5 "\t" $6}'|grep "::ffff:"|sed -e 's/::ffff://' -e 's/:[0-9]*//' |sort|uniq -c| sort -rn|head -10 结果: 122 125.162.71.199 TIME_WAIT 99 79.119.125.43 TIME_WAIT 81 125.167.243.77 TIME_WAIT 75

tcp连接探测Keepalive和心跳包

采用TCP连接的C/S模式软件,连接的双方在连接空闲状态时,如果任意一方意外崩溃.当机.网线断开或路由器故障,另一方无法得知TCP连接已经失效,除非继续在此连接上发送数据导致错误返回.很多时候,这不是我们需要的.我们希望服务器端和客户端都能及时有效地检测到连接失效,然后优雅地完成一些清理工作并把错误报告给用户. 如何及时有效地检测到一方的非正常断开,一直有两种技术可以运用.一种是由TCP协议层实现的Keepalive,另一种是由应用层自己实现的心跳包. TCP默认并不开启Keepalive功能,

详解Oracle RAC 环境下的连接管理

这篇文章详细介绍了Oracle RAC环境下的连接管理,分别介绍了什么是 Connect Time Load Balancing.Runtime Connection Load Balancing.Connect Time Connection Failover 和 Runtime Connection Failover,以及里面所涉及到的 TAF.ONS.FCF.FAN.LBA 等诸多知识点.本文主要是针对 Oracle RAC 11gR2 环境下的连接管理,但同时也会对比说明一下 Oracl