当前位置:  技术问答>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就能快速响应用户请求。

|
第一种方式是典型的用法,都连同一个端口,连接建立后创建新的进程或是新的线程对这个连接负责,这样服务器是好控制的.
而第二种方式基本不会被人采用,为什么呢?你开多个端口来侦听,做同一件事情,那么由客户端自己来选择用哪一个端口,那么客户自己怎么去决定选哪一个端口呢?很可能的是90%的客户端选了第一个端口,佘下10%的选了另外的端口,那另外的那些端口基本就没有发挥什么作用.开在那里空占用系统资源. 就算是所有客户端平均的选择了不同的端口也看不出有什么好处,徒增加程序的复杂度罢了.

|
QQ那样的系统,我想主要采用的是UDP方式.服务器只是维护各客户端的IP及端口的列表并通知客户端,这样各客户端间是可以直接通信的.当然也不是这么简单,如涉级到NAT穿越问题.

|
第一卷 第三版 英文的
http://down.stdcpp.cn/downloads/ebooks/unix/unpv1_3e.rar

其他的你可以在网上google一下

|
第一个要用多多线程来处理不同的客户端,这是常用的模式。第二种也可以,但是客户端程序怎么写呢?每个客户端编译一个版本还是配置一次连接参数,何况效率也不行,因为系统要为每个套接字维护一个数据结构。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.xml.bind类marshaller.listener的类成员方法: marshaller.listener定义及介绍
  • android中如果为listview的item添加listener,也能为item中的button添加listener
  • java命名空间javax.xml.bind类unmarshaller.listener的类成员方法: unmarshaller.listener定义及介绍
  • 初学socket,求教关于listen和accept关系的问题。
  • java命名空间javax.swing.undo类undoableeditsupport的类成员方法: listeners定义及介绍
  • Select和listen函数的区别
  • java命名空间java.net类socketimpl的类成员方法: listen定义及介绍
  • oracle9i中的listener
  • java命名空间javax.management.modelmbean接口modelmbeannotificationbroadcaster的类成员方法: removeattributechangenotificationlistener定义及介绍
  • 关于listen的问题
  • java命名空间javax.xml.bind类marshaller.listener的类成员方法: aftermarshal定义及介绍
  • 关于如何notify事件给所有的Listeners.
  • java命名空间javax.management.modelmbean类requiredmodelmbean的类成员方法: removeattributechangenotificationlistener定义及介绍
  • 不属于任何进程的LISTEN状态的socket如何退出?
  • java命名空间javax.xml.bind类unmarshaller.listener的类成员方法: afterunmarshal定义及介绍
  • Linux下如何启动oracle的Listener服务??
  • 如何修改VNC Server的Listen Port?
  • 请问listen函数的执行过程
  • 请问listen函数中最大队列的问题
  • 如何配置 linux 下 oracle 的 listener .ora 和
  • 谁告诉我norton ghost2002的listen number!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3