linux套接字之端口复用
生活随笔
收集整理的這篇文章主要介紹了
linux套接字之端口复用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
友鏈
references:
- https://lwn.net/Articles/542629/
具體使用就是SO_REUSEPORT選項
這個選項允許多個套接字綁定到同一個地址和端口上
該選項的主要目的就是為了提升多線程網絡服務器應用的性能
int sfd = socket(domain, socktype, 0);int optval = 1; setsockopt(sfd, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval));bind(sfd, (struct sockaddr *) &addr, addrlen);只要綁定到這個地址和端口上的套接字都設置了SO_REUSEPORT選項,那么他們就可以綁定到同一個地址和端口
這樣不同線程中的socket就可以使用自己的套接字來調用accept函數來接收客戶端數據,在這之前,多線程服務器應用中所有的線程都是用同一個套接字調用accept
對于以前的單套接字方式,如果來自客戶端的流量特別大,比如說每秒40000個連接,是完全承受不住的,響應速度會變得非常慢
另外一個弊端就是,在多線程應用中,所有的線程一般都通過如下的循環來接收來自客戶端的連接
while (1) {new_fd = accept(...);process_connection(new_fd); }這種循環并不能很好地平衡每個線程的負載,很可能會出現一個線程忙得不得了,而另一個線程閑著沒事干的情況
相比之下,端口復用使得每個線程都能均衡的收到連接
值得注意的一點是,連接的分配是由一個四元組確定的,即clientIP、clientPort、serverIP、serverPort
這樣一來,同一對clientIP、clientPort只會被分發給同一個線程,這樣有助于維護會話
總結
以上是生活随笔為你收集整理的linux套接字之端口复用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RCAR会议:我的RTFA算法里面的ge
- 下一篇: 快速找到 Linux Kernel 中各