当前位置: 技术问答>linux和unix
linux服务器程序
来源: 互联网 发布时间:2016-06-23
本文导语: 本帖最后由 lengfeng04 于 2009-08-11 13:24:10 编辑 最近要开发linux的服务器端程序,我对此没有太多了解,我想问一下 1、服务器端启动socket监听,一旦有客户端连接上来的时候,一般是起一个进程去对其服务,还是起一个...
1、服务器端启动socket监听,一旦有客户端连接上来的时候,一般是起一个进程去对其服务,还是起一个线程来服务的?
2、一般服务器是用阻塞方式 还是用I/O复用的方式?
3、如果服务器端要等待用户输入(比如输入各种服务器端指令),是否要开个线程来启动socket监听?
4、一般服务器的并发数是多少,比如是一个网络游戏,这样需要容纳上千人同时在线,服务器能否容纳这么多socket连接呢?如果一个客户端是要起一个进程/线程,能否同时起上千个进程/线程呢?
|
多线程+ select复用模型。
或者直接epoll.
这种模型,网上很多例子,千万别自己重新全写一遍。
http://www.cnblogs.com/OnlyXP/archive/2007/08/10/851222.html
或者直接epoll.
这种模型,网上很多例子,千万别自己重新全写一遍。
http://www.cnblogs.com/OnlyXP/archive/2007/08/10/851222.html
|
"4、一般服务器的并发数是多少,比如是一个网络游戏,这样需要容纳上千人同时在线,服务器能否容纳这么多socket连接呢?如果一个客户端是要起一个进程/线程,能否同时起上千个进程/线程呢?"
如果用select模型最多是1024个client,当然可以修改这个参数,不过这时最好用epoll模型。
还有,没必要起上千个线程,一般一个accept线程(侦听client),一个处理线程(send和 recv)差不多就够了。
如果用select模型最多是1024个client,当然可以修改这个参数,不过这时最好用epoll模型。
还有,没必要起上千个线程,一般一个accept线程(侦听client),一个处理线程(send和 recv)差不多就够了。
|
你参考unix网络编程第一卷后面的服务器/客户端编程模式
有好多种模式
而且作者也列举了各种优缺点,很好的
比如
1.服务器启动的时候启动进程池,
2.服务器启动的时候启动线程池
3.服务器启动的时候启动大量的accept()阻塞起来监听,等等。
4.最简单的。来一个请求fork()一个线程
有好多种模式
而且作者也列举了各种优缺点,很好的
比如
1.服务器启动的时候启动进程池,
2.服务器启动的时候启动线程池
3.服务器启动的时候启动大量的accept()阻塞起来监听,等等。
4.最简单的。来一个请求fork()一个线程
|
1. 线程吧。
2. 复用吧。
3. 是的吧
4. 具体多少我也不知道上千个应该没问题。
2. 复用吧。
3. 是的吧
4. 具体多少我也不知道上千个应该没问题。
|
显然用线程了,
进程划不来。
进程划不来。