网络编程
jollyjumper
一点记录
展开
-
socket关闭后无法绑定端口的问题
之前有所耳闻,没有去注意,直到被问到这个问题.如果一个socket绑定了某个端口,该socket正常关闭或程序退出后,在一段时间内该端口依然保持被绑定的状态,其他程序(或者重新启动的原程序)无法绑定该端口。可以在获得socket描述符之后通过调用setsockopt语句避免该问题: int sockfd; int opt = 1; int原创 2014-02-18 13:30:32 · 5898 阅读 · 2 评论 -
Linux 的 splice 和sendfile系统调用
Linux内核有zero copy的函数。nginx和proftpd中用到sendfile(文件到socket),haproxy则用到slice(socket到socket),比较下来,haproxy仍然需要调用两次system call(与read,write一样),在网上没有找到相关的性能测试,如果有提高,估计是少了系统空间和用户空间的拷贝。原文:http://hi.baidu.com/w转载 2014-03-31 23:15:29 · 2975 阅读 · 0 评论 -
文件广播的实现
商户搜索索引高达22G(压缩之后10G),而replication有17台,尽管现在索引机出口带宽高达2Gb/s,下载还要花费15~20分钟。用广播/组播方式可以节省出口,以及公用网络带宽, 早在两年前就有做广播工具的想法(当时是ipad会议系统,需要把文件分发到每台ipad上,ipad最多有700-800台,无线网络较差),憋了一段时间设计、整理思路、实现、调试,终于出结果了,感觉蛮有收原创 2015-01-09 23:09:30 · 1425 阅读 · 0 评论 -
send和sendto的区别
ttp://www.beej.us/guide/bgnet/output/html/multipage/sendman.htmlsend()用于TCP SOCK_STREAM,sendto()用于UDP SOCK_DGRAM, send支持flags:MSG_OOB:send as "Out of Band" data.该数据包优先,可以先接受到,对端会收到SIGURG信号MS原创 2014-12-06 09:20:13 · 11381 阅读 · 0 评论 -
PushService开发分享
公司开发的push service分享,干货如下:1.使用nio,由于连接数较多,select不能一有事件就handle,而是等10-50ms再批量处理(应该有对应接口),减少CPU空转2.为减少hbase压力,使用memcache,memcache缓存当天的用户信息3.内存池使用DirectByteBuffer,这样读取的IO不用经过java堆原创 2014-12-06 09:34:22 · 758 阅读 · 0 评论 -
网络包出错概率
tcp,udp的校验和很弱,简单点看就是全部加起来取反,连顺序错误的问题都不能防止,位数也不多,16位。岂不是有1/65536的概率出错也检测不出来?注意以太网那层是crc校验,两个合在一起,出错没检测出来的概率大大降低。万一出错,应用层可以再做一次校验,如果真的这样,最怕的是协议的每一帧不定长,一旦出错边界完全错乱,错乱中甚至非常小概率请求被错误解读,不过多数情况是数据从此不可用。这原创 2014-12-06 09:22:41 · 2390 阅读 · 0 评论 -
Netty中处理写序列化异常
writeAndFlush之后既不能在inbound的exceptionCaught也不能在outputbound的exceptionCaught中拿到异常(这两个应该只处理channelRead,channelWrite的异常),正确的方法是使用addListener中的回调:ChannelFuture f = ctx.writeAndFlush(response);f.addLi原创 2015-08-12 23:22:14 · 4559 阅读 · 0 评论