当前位置:  技术问答>linux和unix

socket的问题,很急

    来源: 互联网  发布时间:2015-07-06

    本文导语:  要写一个程序,提供socket服务,但是client可能有很多,请问:是不是要每个client对应一个进程或线程啊,如果只有一个进程或线程能不能支持多个client同时访问呢?如果做成多个进程或线程的话socket id用同一个行不...

要写一个程序,提供socket服务,但是client可能有很多,请问:是不是要每个client对应一个进程或线程啊,如果只有一个进程或线程能不能支持多个client同时访问呢?如果做成多个进程或线程的话socket id用同一个行不行啊。

|
server里面用fork好了,每一个子线程对应一个client

|
用一个进程也行,不过要自己去管理不同的client,而且如果1个client出了问题,就全完了.

|
1.fork()
2.用thread方式

|

贯注

|
直接看pthread的资料。电子书有:posix thread programming primer

|
可以建立一个client队列,通过select函数进行轮询

|
只需要建立一个socket,然后再create线程,在线程里accept,这样就可以了。

|
可以每一个接收到的服务都fork()一个子进程来处理
首先提示一下,那跟client有多少个是没有关系的

|
你好象把概念弄混了。

socket 的建立给fork 子进程无关。

因为一对套节字只唯一标识一个连接的。
如果你是使用tcp的的话,需要对每一个套节字进行服务,你可以使用子进程,线程等方法处理,select 也行。
而如果是udp 的话你只需要记录这个socket的描述字,accept 即可.

以后的操作都以这个套节字来完成。

|
只有一个进程或线程也可以支持多个client访问,不过比较复杂,需要做成一个异步服务器,对连接上来的客户端轮询处理,效率太低。
最好用多线程。
这方面的书推荐看《Unix网络编程》第一卷。
“如果做成多个进程或线程的话socket id用同一个行不行啊。”最好还是先看一下书吧,基本的概念和服务器模型你都还没弄清楚。

|
请问大家,你们碰到过这个问题吗:
http://community.csdn.net/Expert/topic/3192/3192742.xml?temp=.1753046

|
实时性要求高的应对每个客户连接开一个线程或进程,否则可启用两个进程(一个接收数据线程/进程和处理数据线程/进程),接收的数据可放到队列中,另一个线程/进程则处理队列中的数据,如监控之类的就可以这么做

|
用一个进程行
用fork()也可以
用pthread最好

|
如果一个服务器要支持5000个客户 那是不是要开5000个fork()或者pthread

|
要是你用子进程完成,当然每个子进程对应一个客户,自然要有5000个子进程

要是用线程完成,只需建立一个长度为5000的socket数组(int型),然后每当用户发出请求
时,将其请求存入一个请求队列,再用condition唤醒一个线程来处理这个请求。这时,只要把那个用户对应的socket号传送给线程就成了。线程总数不必很多的。

另外,我建议这种情况可用select完成,多路复用,效率不会比多线程低的。

|
正解~~~


/********************************* * http://www.upsoft.com.cn      *
 * MSN: dengfengyang@hotmail.com *
*********************************/

|
TO  zebulonchan(zebulon) 
如果我要同时支持5000个客户  那是不是肯定要建立5000个线程?

另外select 是不是只能同时支持64个客户?

    
 
 

您可能感兴趣的文章:

  • linux socket问题。。怎样获得已帮定特定port的一个套接字socket
  • 关于socket概念的理解问题!
  • socket编程 中的bind问题
  • 你是否可以回答Socket的问题?数据先后问题
  • 多进程socket编程问题
  • Socket的问题
  • socket accept问题,大家指教。
  • socket客户端程序的问题
  • 关于多网口socket通信的简单问题
  • fgets用在SOCKET流上的问题
  • linux socket fd 写阻塞问题
  • linux下用socket实现多进程间通信问题?
  • 请教:多线程使用同一个socket进行数据收发会出现什么问题?
  • sco unix下socket编程的问题,请大家帮忙
  • 请问socket方面的问题
  • socket编程中的问题,请各位大侠指教!
  • 急!!请教关于linux socket编程的一个问题!!
  • socket编程,使用recvfrom()函数监听问题。
  • linux下socket编程问题!
  • 请教两个小问题:一个cgywin下使用vi的问题,另一个socket的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.net类socket的类成员方法: socket定义及介绍
  • re socket编程中 ACCEPT返回的socket与原socket(他参数中的)端口号一样吗?
  • java命名空间java.nio.channels类socketchannel的类成员方法: socket定义及介绍
  • libevent2需要从socket读一段数据写入一个socket中,同时发送给另一个socket
  • java命名空间java.nio.channels类serversocketchannel的类成员方法: socket定义及介绍
  • socket 通讯开发包 Simple Sockets
  • java命名空间java.nio.channels类datagramchannel的类成员方法: socket定义及介绍
  • C++ Socket 库 C++ Sockets
  • java命名空间java.net类socket的类成员方法: getsendbuffersize定义及介绍
  • vc做的的socket应用和unix下socket?
  • java命名空间java.net类socket的类成员方法: getreceivebuffersize定义及介绍
  • QSocketDevice ( int socket, Type type )中那个 int socket 是哪里来得?
  • java命名空间java.net类socket的类成员方法: gettrafficclass定义及介绍
  • socket编程 通过man socket, 没有找到socket函数的第一参数该填什么 怎样利用man手册
  • java命名空间java.net类socket的类成员方法: getport定义及介绍
  • 线程间可否通过管道传递SOCKET句柄?还有其他方式传递SOCKET么?
  • java命名空间java.net类socket的类成员方法: getlocalport定义及介绍
  • 操作系统 iis7站长之家
  • java命名空间java.net类socket的类成员方法: getinetaddress定义及介绍
  • 两个 Socket 互相通信,其中一个如何判断另一个 Socket 是否已经意外断开了连接?
  • java命名空间java.net类socket的类成员方法: isconnected定义及介绍
  • 大家帮忙推荐一本linux socket编程的入门书,我刚接触socket,谢谢!!


  • 站内导航:


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

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

    浙ICP备11055608号-3