文章分类 - 网络编程
摘要:首先解释一下这个题目, "报文"指的是业务层自定义的报文, TCP是流式协议, 不像UDP那样是报文协议.SYS-ATM开发的RMS系统, 需要和SYS-SIM开发的某个系统进行交互, 进行自动重启服务器和其它操作. 双方使用了TCP, 并自定义了一个简单的应用层协议, 请求报文的格式为:&sig=xxxSYS-ATM作为请求方, 用PHP的stream_socket_sendto()进行发送. SYS-SIM开发服务器端, 使用Python的twisted框架. 上线后, 出现问题, 服务器端接收到的报文不完整. 例如, json串只读了一半, 或者缺少"
阅读全文
摘要:连续发送多份小数据时40ms延迟问题以及TCP_NODELAY、TCP_CORK失效问题的定位与解决Pyramidtandai@baidu.com提到TCP_NODELAY和TCP_CORK,相信很多人都很熟悉。然而由于Linux实现上的问题,这两个参数在实际使用中,并不像书里介绍的那么简单。最近DTS在解决一个TCP超时问题时,对这两个参数和它们背后所隐藏的问题有了比较深刻的认识,在此与同学们分享一下我们的经验和教训。问题描述和许多经典的分布式程序类似,DTS使用TCP长连接用于client和server的数据交互:client发送请求给server,然后等待server回应。有时候出于数据
阅读全文
摘要:select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。关于这三种IO多路复用的用法,前面三篇总结写的很清楚,并用服务器回射echo程序进行了测试。连接如下所示:select:http://www.cnblogs.com/Anker/archi..
阅读全文
摘要:1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:#include int epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wai..
阅读全文
摘要:这里对在网络程序中遇到的一些问题进行了总结, 这里主要针对的是我们常用的TCP socket相关的总结, 可能会存在错误, 有任何问题欢迎大家提出.对于网络编程的更多详细说明建议参考下面的书籍《UNIX网络编程》《TCP/IP 详解》《Unix环境高级编程》网络编程常见问题总结相关说明非阻塞IO和阻塞IO基本概念设置区别:读:写:超时控制:长连接和短连接的各种可能的问题及相应的处理短连接:长连接:主要线程模型优缺点和注意事项最简单的线程模型生产者消费者模型异步模型对一些常见错误号的分析FAQ为什么网络程序会没有任何预兆的就退出了write出去的数据, read的时候知道长度吗?如何查看和观察句
阅读全文
摘要:Memcached源码分析之网络模型篇 memcached 采用多线程的工作方式, 主线程接收连接, 然后把连接平摊给工作线程, 工作线程处理业务逻辑,memcached 使用 libevent 处理网络事件, 主线程和工作线程都有一个 event base, 这是 libevent的核心数据结构, event base 能够监听多个 socket 的网络事件, 概括起来, memcached 大体框架如 图1所示.图1 memcached的多线程模型主线程的初始化主线程首先初始化 libevent 的核心数据结构 main base, 然后创建监听socket, 把监听 socket 封装.
阅读全文

浙公网安备 33010602011771号