socket
xiaofei0859
这个作者很懒,什么都没留下…
展开
-
神秘的40毫秒延迟与 TCP_NODELAY
最近的业余时间几乎全部献给 breeze 这个多年前挖 下的大坑—— 一个异步 HTTP Server。努力没有白费,项目已经逐渐成型了, 基本的框架已经有了,一个静态 文件模块也已经实现了。写 HTTP Server,不可免俗地一定要用 ab 跑一下性能,结果一跑不打紧,出现了一个困扰了我好几天的问题:神秘的 40ms 延迟。Table of Contents转载 2016-01-28 12:00:01 · 1385 阅读 · 0 评论 -
Linux下的IPC-UNIX Domain Socket
一、 概述UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。UNIX Domain Socket有SOCK_DGRAM或SOCK_STREAM两种工作模式,类似于UDP和TCP,但是面向消息的UNIX Domain S转载 2017-07-05 10:30:27 · 495 阅读 · 0 评论 -
阻塞、非阻塞、异步、同步以及select/poll和epoll
针对IO,总是涉及到阻塞、非阻塞、异步、同步以及select/poll和epoll的一些描述,那么这些东西到底是什么,有什么差异?一般来讲一个IO分为两个阶段:等待数据到达把数据从内核空间拷贝到用户空间现在假设一个进程/线程A,试图进行一次IO操作。A发出IO请求,两种情况: 1)立即返回 2)由于数据未准备好,需要等待,让出CPU给别的线程,自转载 2017-07-01 23:26:35 · 373 阅读 · 0 评论 -
IM即时通讯实现原理
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前 者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数 据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。QQ就转载 2017-05-02 12:13:12 · 852 阅读 · 0 评论 -
linux send与recv函数详解
linux send与recv函数详解1 #include 2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);3 ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);recv 和send的前3个参数转载 2016-12-15 14:20:03 · 354 阅读 · 0 评论 -
Protocol Buffer技术详解(语言规范)
[转]:http://www.cnblogs.com/stephen-liu74/archive/2013/01/02/2841485.html内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于一个公司内部项目的Demo。这样做不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交转载 2016-11-15 11:38:13 · 4872 阅读 · 0 评论 -
linux下socket的close和shutdown
在Linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义#includeint shutdown(int sockfd,int how);how的方式有三种分别是SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。SHUT_WR(1):关闭sockfd的写功能,此选转载 2016-10-13 10:03:33 · 639 阅读 · 0 评论 -
Linux网络编程socket选项之SO_LINGER,SO_REUSEADDR
Linux网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR. SO_LINGER在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回.转载 2016-04-12 23:08:41 · 554 阅读 · 0 评论 -
TCP协议中的SO_LINGER选项
SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成。没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回。如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间。以调用close()主动关闭为例,在发送完FIN包后,会进入FIN_WAIT_1状态。如果没有延迟关闭(即设置SO_LINGER选项),在转载 2016-04-12 22:39:46 · 1814 阅读 · 0 评论 -
Linux下高性能网络编程中的几个TCP/IP选项
最近在新的平台上测试程序,以前一些没有注意到的问题都成为了性能瓶颈,通过设置一些TCP/IP选项能够解决一部分问题,当然根本的解决方法是重构代码,重新设计服务器框架。先列出几个TCP/IP选项:选项man 7 socket:SO_REUSEADDRSO_RECVBUF/SO_SNDBUFSO_KEEPALIVESO_LINGERman 7 tcp:TCP_C转载 2016-04-12 18:40:13 · 846 阅读 · 0 评论 -
setsockopt 设置 SO_LINGER 选项
setsockopt 设置 SO_LINGER 选项 此选项指定函数close对面向连接的协议如何操作(如TCP)。内核缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方。 SO_LINGER选项用来改变此缺省设置。使用如下结构:struct linger { int l_onoff; /* 0转载 2016-04-12 18:35:51 · 685 阅读 · 0 评论 -
Linux下pipe使用注意事项
Linux下的pipe使用非常广泛, shell本身就大量用pipe来粘合生产者和消费者的. 我们的服务器程序通常会用pipe来做线程间的ipc通讯. 由于unix下的任何东西都是文件,只要是文件,在读取的时候,,就会设置last access time, 所以pipe也不例外., 但是这个时间对我们没有意义 如果pipe使用的非常频繁的时候会碰到由于设置访问时间导致的性能问题. 这个开销远比pi转载 2016-01-28 15:42:39 · 904 阅读 · 0 评论 -
SO_KEEPALIVE选项
SO_KEEPALIVE在《UNIX网络编程第1卷》中也有详细的阐述:SO_KEEPALIVE 保持连接检测对方主机是否崩溃,避免(服务器)永远阻塞于TCP连接的输入。设置该选项后,如果2小时内在此套接口的任一方向都没有数据交换,TCP就自 动给对方 发一个保持存活探测分节(keepalive probe)。这是一个对方必须响应的TCP分节.它会导致以下三种情况:对方接收一切正常:转载 2016-01-28 14:58:42 · 498 阅读 · 0 评论 -
AF_INET域与AF_UNIX域socket通信原理对比
转载:http://blog.csdn.net/sandware/article/details/409234911. AF_INET域socket通信过程典型的TCP/IP四层模型的通信过程。发送方、接收方依赖IP:Port来标识,即将本地的socket绑定到对应的IP端口上,发送数据时,指定对方的IP端口,经过Internet,可以根据此I转载 2017-07-07 09:27:07 · 526 阅读 · 0 评论