免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345下一页
最近访问板块 发新帖
查看: 16065 | 回复: 41
打印 上一主题 下一主题

讨论一个服务器的设计方案 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-25 17:52 |只看该作者 |倒序浏览
10可用积分
讨论一个服务器方案
功能类似代理服务器,完成数据的转发,一边接受,一边发送
大概要5万个客户端

没做过这方面的,大家能否说详细点

最佳答案

查看完整内容

epoll + 线程池 + 缓存一个主线程(Accept所有客户端代理请求),有连接进来以后,建立连接以后,新建一个任务,马上把任务推到接收客户端代理的线程池.由这个线程池处理.主线程不要管这个了.再开另一个需与服务器也就相当于给代理客户端需要连接的服务器建立连接,然后把这个线程池里的Task与上面的线程池的Task对应,就可以进行消息的转发了.注意上面的socket要设计成非阻塞模式,上面所有的接收消息全部进缓存,由池程池轮循处理,效率不会 ...

论坛徽章:
0
2 [报告]
发表于 2010-01-25 17:52 |只看该作者
epoll + 线程池 + 缓存

一个主线程(Accept所有客户端代理请求),有连接进来以后,建立连接以后,新建一个任务,马上把任务推到接收客户端代理的线程池.由这个线程池处理.主线程不要管这个了.

再开另一个需与服务器也就相当于给代理客户端需要连接的服务器建立连接,然后把这个线程池里的Task与上面的线程池的Task对应,就可以进行消息的转发了.

注意上面的socket要设计成非阻塞模式,上面所有的接收消息全部进缓存,由池程池轮循处理,效率不会存在任何问题.

5W个连接你要用到负荷分担,对客户端提供一个统一的IP,由这个IP服务器管理下面的代理服务器并进行负载均衡,客户端首先连接的是这个IP,由这个IP服务器分一个下面的代理服务器IP和端口,客户端再去连相应的代理服务器.

大型网游相关代理网关服务器基本上是这个架构.

相关epoll线程池IO模型以及缓存你可以看下开源的私服魔兽世界Ascent这里面的代码.

论坛徽章:
0
3 [报告]
发表于 2010-01-25 17:59 |只看该作者
多线程加epoll是不二选择
合适的话我帮你写得了,到时候意思下就行

论坛徽章:
0
4 [报告]
发表于 2010-01-25 21:31 |只看该作者
epoll+线程池

论坛徽章:
0
5 [报告]
发表于 2010-01-25 21:52 |只看该作者
EPOLL + 线程池 + 内存池
我是打算这样开发啊
不过,这个应该不是方案吧;
我问的是服务器的架构哦,,要7*24小时运行的
高效,稳定

论坛徽章:
0
6 [报告]
发表于 2010-01-25 21:54 |只看该作者
不知道你还想要什么样的方案

论坛徽章:
0
7 [报告]
发表于 2010-01-25 22:01 |只看该作者
接受 | 缓存 |发送
是要一个进程采用多线程接受,另一个进程采用多线程发送

还是要在一个进程里面完成呢?

论坛徽章:
0
8 [报告]
发表于 2010-01-25 22:13 |只看该作者
每次转发的数据量有多大?只是转发给其他服务器,不管这些服务器向client的回复么(或者说就没有)?另外,连接是长连接还是短连接?

论坛徽章:
0
9 [报告]
发表于 2010-01-26 09:30 |只看该作者
转发时连接,转发完成就断掉连接
有回复

论坛徽章:
0
10 [报告]
发表于 2010-01-26 10:18 |只看该作者
我看过一个网游的连接服务器,它的任务也是转发数据,但我怀疑这个转发服务器的效率,比如epoll_wait回来有2万个socket可读那么串行的去读,读到最后一个时是不是时间已经过去了很多了,不会存在严重延迟吗?而且他那个是单进程,不能利用多核的优势? 我只是这么想,没有这方面的实际经验

[ 本帖最后由 学与思 于 2010-1-26 10:19 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP