
网络编程
Toni-Kroos
这个作者很懒,什么都没留下…
展开
-
网络编程SO_REUSEADDR
1 发现问题 我在开发一个socket服务器程序并反复调试的时候,发现了一个让人无比心烦的情况:每次kill掉该服务器进程并重新启动的时候,都会出现bind错误:error:98,Address already in use。然而再kill掉该进程,再次重新启动的时候,就bind成功了。真让人摸不着头脑。难道一定要尝试两次才显得真诚?这不科学! 我的第一反应是kill进程的时候,并...转载 2018-08-09 16:08:38 · 450 阅读 · 0 评论 -
C++网络编程模型
通常需要主线程、网络读写线程、业务工作线程(如写文件)首先主线程负责监听连接,accept后把client fd通过消息或管道发给网络读写线程。网络读写线程收到client fd后将其加入epoll,有读写事件后触发读写逻辑。可设计两个chunk queue list,一个正常的List,一个recycle list。比如每个chunk 8K大小,读到数据后写入chunk尾部。如果...原创 2019-01-29 17:30:12 · 751 阅读 · 0 评论 -
Linux3.9中 SO_REUSEPORT 对高并发服务器的改进
背景在传统网络编程模型中,为了实现高并发的服务器, 通常采用的做法是Master进程创建一个Listen socket,然后fork出来N个worker进程,这N个worker进程同时侦听这个socket。然而这种模式仅仅是做到了进程级的可扩展性,即一个进程在忙时,其它进程可以介入帮忙处理,底层的socket句柄其实是同一个!简单点说,这是一个沙漏模型:这种模型在处理同一个sock...原创 2019-03-02 11:16:19 · 672 阅读 · 0 评论 -
个人对网络编程中的一点思考
一、背景在高并发服务器模型中, 为了充分利用CPU的硬件资源, 多进程/多线程模型是必不可少的。 在多进程/多线程模型中, 还要考虑尽量减少上下文切换、进程/线程切换、CPU核心调度切换、锁竞争等。二、多进程/多线程模型在多核时代,一般使用以下比较典型的多进程/多线程服务器模型。首先需要单线程listen一个端口并负责accept连接,当有新连接到来时,根据负载均衡原则唤...原创 2019-03-02 11:55:55 · 197 阅读 · 0 评论