您现在的位置:首页 --> 查看专题: Socket
有个 golang 写的 proxy server, 大概日常 tcp 连接数两万多左右,结果某次在 /proc/pid/fd 下面一看,竟然有五到六万多文件,ls -l 一看,居然 socket 只有两万多,pipe 反而有三万多小四万,这就奇了怪了,哪儿来的这么多 pipe?
在实际的软件开发工作中,经常会涉及到socket编程,也就是利用socket来完成消息的交互和命令的执行。本文通过一个C程序来讲解Linux下socket的整个消息执行流程。
一个IP地址和一个端口号也称为一个插口,即socket。这个术语出现在最早的TCP规范(RFC793)中,后来它也作为表示伯克利版的编程接口。插口对(socket pair)(包含客户端IP地址、客户端口号、服务器IP地址和服务器端口号的四元组)可唯一确定互联网中每个TCP连接的双方。
图虫的服务器长期是单机运行。估计除了mysql之外,php-fpm和redis还可以在单机上共存很长时间。(多说服务器早就达成了单机每日2000万+动态请求,所以我对单机搞定图虫的大流量非常乐观)
如果是单机服务,其实就不需要用IP哪怕是127.0.0.1这样的IP去连接mysql/redis/php了,因为即使是127.0.0.1也是要走TCP/IP层的。
unix提供的unix socket来实现单机的端口访问,很多文章提到用unix socket可以提升连接速度。
我简单测试了一下,200次redis请求的耗时38ms,如果改成unix socket方式,立刻降到27ms。这简直是立竿见影啊,10ms的差距足以让我们有动力把IP方式改成unix socket方式。接mysql/redis/php了,因为即使是127.0.0.1也是要走TCP/IP层的。 unix提供的unix socket来实现单机的端口访问,很多文章提到用unix socket可以提升连接速度。 我简单测试了一下,200次redis请求的耗时38ms,如果改成unix socket方式,立刻降到27ms。这简直是立竿见影啊,10ms的差距足以让我们有动力把IP方式改成unix socket方式。 Mysql(PDO)启用unix socket的方法 1.在PDO的DSN里面:原来写host:xxx,改成unix_s
因为公司为了节约流量,所以准备了一下测试 Flash 的 p2p 功能,简单使用 AnyEvent 来简单实现了一个这样的 socket 的服务器并且也能正常的工作了(有小 bug 但不影响使用)。
前几天看到一篇博客,提到php所在服务器在大并发情况下,频繁创建TCP短连接,而其所在服务器的2MSL时间过长,导致没有端口可用,系统无法创建TCP socket,而大量报错。博主在后面给的解决方案是减少2MSL的时间,尽快清除TIME_WAIT状态的TCP连接,回收端口。同时,文章结尾写了不用长连接的理由,但这真的是最好的解决办法吗?有其他办法可以更好的做法吗?
去年受@colyli 指点,决定花些时间读一些linux kernel network部分的代码,准备把阅读代码的过程记录下来,也希望能有大牛前来指点,下面就先写一下创建socket对象的过程。
今天下午在segmentfault.com看到一个提问,提问标题是“PHP怎么做服务化”,其中问道php是不是只能以web方式调用。其实很多人对PHP的使用场景都有误解,认为php只能用于编写web脚本,实际上,从PHP4开始,php的使用场景早已不限于处理web请求。 从php的架构体系来说,php分为三个层次:sapi、php core和zend engine。php core本身和web没有任何耦合,php通过sapi与其它应用程序通信,例如mod_php就是为apache编写的sapi...
websocket是HTML5的一种新的通信协议,它是实现了浏览器与服务器的双向通讯。在 WebSocket API 中,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。关于websocket的更多信息,请移步维基百科使用WebSocket 在客户端使用websocket需要创建WebSocket对象,通过提供的open、send、message、close等方法实现创建、发送、监听信息、关闭连接。例如下面的代...
在nodejs项目中对于一些认证需要用到session,例如我写的nodejs 聊天室的demo,就是通过session实现的认证。当存在session,直接进入聊天室,而不会重新登录。在网上也找到不少关于Express框架中的session调用方法,可是发现真正能用的不是很多,今天根据聊天室的制作过程,整理下Express和socket.IO中使用session的具体方法。 Express的session是通过cookie实现的,用到了connect中的两个module:parseCookie和MemoryStore,前者...
前几天晚上边看水浒边写的nodejs的聊天室,前面说了,放假之前要把近日学习nodejs的所有心得整理下,今天就是30号鸟~撒欢~,最后放这个聊天室出来给大家作为学习nodejs的参考示例,希望对大家有用。感谢:cnodejs群里的老雷,及其微博上的基友们!顺祝大家长假快乐,顺祝自己明天动车不出轨,顺祝明年不再过节,感慨多了…… 特点聊天室主要功能及其特点: 采用nodejs(屁话) express框架,jade做模板 socket.io做前后端的webso...
想找个工具来调查下unix域套接字的发送和接受情况,比如说A程序是否送出,B程序是否接收到,他找了tcpdump ,wireshark什么的,貌似都不支持。 这时候还是伟大的systemtap来救助了。 因为所有的socket通讯都是通过socket接口来的,任何family的通讯包括unix域套接都要走的,所以只要截获了socket 读写的几个sys...
Flash被广泛应用于互联网各个方面,是因为它提供了各种各样的特性,其中很重要的一点就是,可以用flash建立TCP连接到服务器然后交换数据。从网络管理员的观点看,一个互联网的服务器能够连接进到内网里来,是一个很恐怖的事情,所以flash搞出来一个安全策略文件。 改变 Flash Player 9,0,124,0 版本对这个策略文件进行了两个重大改变:一是所有的端口都需要在策略文件里声明了,以前的版本只需要...
这些天用php写了个thrift的socket server,因为原来thrift的源码里php部分只有基于apache的服务器端代码,再加上前些日子看到php也能直接使用libevent构建web服务器,所以才会想到写这个玩玩。 php-thrift-server源码代码直接从apache的thrift项目clone过来,托管在github上....
问题是出在一次模拟http请求的把戏中,我之前还真没有注意到,但后来还是想明白了,多看看http协议不无坏处。当时我将其记录在内网了,发出来大家参考吧。教训啊,血淋淋的教训 在项目开发过程中,自己写了一个基于HTTP的API,来完成服务器之间的通讯,在直接用socket模拟POST请求的时候,异常缓慢,大约需要5秒钟才有响应(从服务端返回的头部来看:Keep-Alive: timeout=5,max=100),后来用PHP自带的SOAP扩展来完成,结果速度出...
在我们疯狂的天朝,有时候,http代理并不能满足要求,也许你还想使用更底层的socket代理
现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我们只是做一个简单的聊天室,但我们让他稳定可靠一些一点也没有错。我的心跳包方案很是简单,原理就是间隔发送心跳包数据给服务器,服务器在一定时间内发回心跳包响应,对比超时限定,如果超过设定的超时时间,则认为当前与服务器的websocket连接已经断开,关闭当前web socket连接,善后处理,例如...
“netstat -nlp”命令可以显示当前用户运行的正在监听的网络进程的状态。在正常情况下,在显示结果的PID/Program name一列显示了进程的进程号和程序的名称。但是在web前端的机器上,apache等均不能正常显示。
[ 共20篇文章 ][ 第1页/共1页 ][ 1 ]
近3天十大热文
- [54] IOS安全–浅谈关于IOS加固的几种方法
- [52] android 开发入门
- [52] 如何拿下简短的域名
- [51] 图书馆的世界纪录
- [49] Oracle MTS模式下 进程地址与会话信
- [49] Go Reflect 性能
- [47] 【社会化设计】自我(self)部分――欢迎区
- [46] 读书笔记-壹百度:百度十年千倍的29条法则
- [35] 程序员技术练级攻略
- [29] 视觉调整-设计师 vs. 逻辑
赞助商广告