当前位置: 技术问答>linux和unix
listen 1个端口和listen 多个端口那个效率更高一些
来源: 互联网 发布时间:2016-09-25
本文导语: 例如:一个server端在listen一个端口,不同客户端在连接;还是一个server端在listen多个端口(一个进程),不同客户端分别连接,那个效率更高一些,请说明实例 | 一般都是一个server端listen一个...
例如:一个server端在listen一个端口,不同客户端在连接;还是一个server端在listen多个端口(一个进程),不同客户端分别连接,那个效率更高一些,请说明实例
|
一般都是一个server端listen一个端口,等待client端来连接,LZ说的第二种方式,我觉得没有什么必要,效率也不会比较第一种方式高。
在linux下当tcp连接数达到某个数时(具体数不记得了),系统就会变得很慢。所以,如果你用户数很多的话,最好的解决方法是用集群的方式,一台server专门处理client的连接,当client连接上来时,server找到一台负载轻的server,让这个server与client连接,而原来的server继续处理新来client的连接。如果你用户数少的话,就用第一种方式就行了。关键是你怎么处理用户请求,而不是开多个port就能快速响应用户请求。
在linux下当tcp连接数达到某个数时(具体数不记得了),系统就会变得很慢。所以,如果你用户数很多的话,最好的解决方法是用集群的方式,一台server专门处理client的连接,当client连接上来时,server找到一台负载轻的server,让这个server与client连接,而原来的server继续处理新来client的连接。如果你用户数少的话,就用第一种方式就行了。关键是你怎么处理用户请求,而不是开多个port就能快速响应用户请求。
|
第一种方式是典型的用法,都连同一个端口,连接建立后创建新的进程或是新的线程对这个连接负责,这样服务器是好控制的.
而第二种方式基本不会被人采用,为什么呢?你开多个端口来侦听,做同一件事情,那么由客户端自己来选择用哪一个端口,那么客户自己怎么去决定选哪一个端口呢?很可能的是90%的客户端选了第一个端口,佘下10%的选了另外的端口,那另外的那些端口基本就没有发挥什么作用.开在那里空占用系统资源. 就算是所有客户端平均的选择了不同的端口也看不出有什么好处,徒增加程序的复杂度罢了.
而第二种方式基本不会被人采用,为什么呢?你开多个端口来侦听,做同一件事情,那么由客户端自己来选择用哪一个端口,那么客户自己怎么去决定选哪一个端口呢?很可能的是90%的客户端选了第一个端口,佘下10%的选了另外的端口,那另外的那些端口基本就没有发挥什么作用.开在那里空占用系统资源. 就算是所有客户端平均的选择了不同的端口也看不出有什么好处,徒增加程序的复杂度罢了.
|
QQ那样的系统,我想主要采用的是UDP方式.服务器只是维护各客户端的IP及端口的列表并通知客户端,这样各客户端间是可以直接通信的.当然也不是这么简单,如涉级到NAT穿越问题.
|
第一卷 第三版 英文的
http://down.stdcpp.cn/downloads/ebooks/unix/unpv1_3e.rar
其他的你可以在网上google一下
http://down.stdcpp.cn/downloads/ebooks/unix/unpv1_3e.rar
其他的你可以在网上google一下
|
第一个要用多多线程来处理不同的客户端,这是常用的模式。第二种也可以,但是客户端程序怎么写呢?每个客户端编译一个版本还是配置一次连接参数,何况效率也不行,因为系统要为每个套接字维护一个数据结构。