|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2014/9/13 17:14:10 |
标题: |
上万个客户端应该怎么弄,没有头绪? |
浏览:3783 |
|
加入我的收藏 |
楼主: |
现在客户端遍布全国各地,可能有上万个。每隔1分钟发送一次数据往服务器。数据不是很重要,丢了也不影响。
不知道怎么写服务端了。
请教大侠们,协议用TCP还是UDP?
控件用INDY还是ICS还是IOCP模型?
想用最简单的方法最快速的开发来实现这个。目前的想法是用ICS的UDP,不知能承受得了么?有没有哪位试过?
----------------------------------------------
- |
作者: |
msfm (清洁工) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/9/13 17:57:48 |
1楼: |
数据不是很重要,丢了也不影响 那就用个UDP就OK了 没啥问题
----------------------------------------------
-
|
作者: |
|
2014/9/13 18:30:05 |
2楼: |
今天刚参加XE7深圳发布会 介绍了新的纯rest服务器架构 李维大牛说支持1000客户端并发
----------------------------------------------
-
|
作者: |
|
2014/9/13 18:33:24 |
2楼: |
这个重点是设计数据库端的并发处理能力 10000/60=167次/秒,若数据库没有很大的查询负荷或其他IO,性能压力并不大
对于程序来说,就是发个消息,一个CLIENT跟1万个CLIENT代码都是一样的
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier 缘在上海
|
作者: |
|
2014/9/13 23:18:26 |
3楼: |
可以用异步通信,多线程处理数据,数据处理做好分割化整为零。
----------------------------------------------
-
|
作者: |
|
2014/9/13 23:40:47 |
4楼: |
可能有上万个。每隔1分钟发送一次数据往服务器。数据不是很重要 那就是骇客程序啰, 定时取得用户资料却又不重要! Google 一下 Load Balance 吧!
----------------------------------------------
-
|
作者: |
|
2014/9/13 23:49:02 |
4楼: |
不知道,要传输的数据量,如果数据很小,估计难度不大,我认为有两大种实现方法: 1、采用Web Service,服务端采用iis或tomcat等,看你的熟练 2、自己开发服务端,估计tcp iocp方式,但要稳定一个广域网最大并发可能是1W,估计要点实力
----------------------------------------------
-
|
作者: |
|
2014/9/14 0:22:10 |
5楼: |
楼主尽量用你熟悉的技术去处理, 服务端尽量的简化,不需要多复杂的逻辑。 你短连接可以,用啥都无所谓,可以像http一样。
服务端,处理好线程之间的资源。 服务端,稳定第一。
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/9/14 0:25:58 |
6楼: |
楼主。 我准备出商业级的服务端架构。
【DIOCP3-商业应用】服务端的分布式逻辑处理方案
【项目概述】
本项目致力于服务端的应用,致力于服务端的稳定,让开发人员专注与逻辑的编写。
【项目保障】
通讯服务器保证7*24小时在线,逻辑进程可以分布式部署,这样一个逻辑进程挂掉,另外的逻辑进程可以自动接管工作。
【项目性能】
网络通信基于diocp3,高并发,同时在线可以保证在5K-1W左右,逻辑处理可以分布式到多台计算机。
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/9/14 1:03:24 |
7楼: |
delphi XE7 的新家伙能处理,可惜又是收费的,不提名字咯,应该我们都是喜欢免费的咯(发布会视频中有,我想办法抽空上去)
----------------------------------------------
XE7发布会视频:http://i.youku.com/u/UMzYzNTkyNTI0/videos FireDac/EMS-[Delphi]技术群 257779952 appmethod[移动开发] 194191706
|
作者: |
|
2014/9/14 9:06:40 |
8楼: |
如果你只会DELPHI的话,那只能用IOCP接收数据,放入内存队列,另外开线程写入数据库. 这在java实现起来非常简单,netty接收数据,存入jedis,另外开线程写入DB,还能支持分布式群集,几十万应该没压力.
----------------------------------------------
|
作者: |
|
2014/9/14 11:01:54 |
9楼: |
楼上说的是 redis NOSQL 高速缓存吧, 用 DELPHI 一样可以用这些成熟的NOSQL高速缓存方案,包括redis, mongodb, memcache, 都有相应的DELPHI 开发包(虽然官方未提供)
----------------------------------------------
-
|
作者: |
|
2014/9/14 13:39:21 |
10楼: |
楼主的这种要求,直接用INDY的UDP绝对可以搞定了。1万个客户端发小数据上来,又不长连接做事情,哪里需要什么IOCP。
----------------------------------------------
QQ: 9717005 我的Blog:http://www.cnblogs.com/anydelphi/
|
作者: |
|
2014/9/14 13:44:00 |
11楼: |
我认为软件设计是考虑最大负载,不是考虑平均数,并发量就如洪峰,堤坝必须能够承受,否则宕机可能。如果用Delphi设计出稳定可靠运行高峰1w连接,需要一定功力,对于新手可能有点难。我弄过这类tcp服务器,7、8百连接,100多并发,设计没花很短时间,不到一半月,稳定和优化系统确花了很长时间,可以说是年计
----------------------------------------------
-
|
作者: |
|
2014/9/14 14:10:41 |
12楼: |
同意楼上,服务端稳定不容易。弄出来容易,稳定不容易
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/9/14 16:22:39 |
13楼: |
to doorkey INDY还是ICS?如果有一万个UDP消息同时发来,INDY能否承受?
----------------------------------------------
-
|
作者: |
|
2014/9/14 16:24:10 |
14楼: |
to luckyrandom 用INDY的TCPserver的话,1个client和1W个client肯定是有区别的。他每来一个client都会启动一个线程直到断开。
----------------------------------------------
-
|
作者: |
|
2014/9/14 17:13:56 |
15楼: |
莫非大家在开玩笑: 10000/60=166 就是只要1秒处理166个包就行了。 http应该就可以搞定了。nginx+php估计就行。
----------------------------------------------
-
|
作者: |
|
2014/9/14 17:15:12 |
16楼: |
至于1万个客户端,现在的硬件,只要你不是一客户端一线程,都可以轻松的做到。我怀疑你用select把fdmax调大点都可以了。
----------------------------------------------
-
|
作者: |
|
2014/9/14 17:17:26 |
17楼: |
还有个笨办法。 你直接前端用nginx接收,接收的时候记录所有日志(如果是post,我不知道nginx能不能把post数据也记录下来,按理应该有这样的插件),然后你后台程序扫描日志来处理就可以了。 这样的开发你只需要一个会配置nginx的人,其他的没有压力。你这个汇报的数据估计也是类似日志方面的。你现在要开发的一个就是扫描日志并做处理。
添加: 找了下网上,nginx可以记录post数据,具体请看 http://www.54chen.com/web-ral/nginx-access-log-post.html
----------------------------------------------
-
|
作者: |
yemny (yemny) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/9/14 18:06:24 |
18楼: |
又要简单 又要稳定可靠 又要会话支持 又要性能好 推荐 直接 web 服务器 iis 之类 web 都是 千锤百炼 然后 就堆硬件
----------------------------------------------
-
|
作者: |
yemny (yemny) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/9/14 22:05:47 |
19楼: |
自己写 能写得过 久经考验的 web 服务器 现在 json rest web api odata 之类 大行其道 就是 个中原因 当然 也不排除 有这个能力 当然 有这个能力 也就不用 接这点活了
----------------------------------------------
-
|
作者: |
sqlnew (sqlnew) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/9/14 22:39:20 |
20楼: |
非常支持yemny (yemny)的观点。 windows的话,后台就直接上IIS,没啥可考虑的。现在windows服务器版本越来越成熟,这点并发没什么,何况可以横向扩充,加硬件,现在单个8核心虚拟机跑asp.net应用,加独立sqlserver数据库,高负荷实时读写都能轻松上w,多开几个,加负载均衡,当前的应用完全无问题,自己是写不过那些大的web服务的。
----------------------------------------------
-
|
作者: |
|
2014/9/15 8:49:03 |
21楼: |
搞成dll后,不知怎样在iis7中发布。
----------------------------------------------
-
|
作者: |
|
2014/9/15 9:21:30 |
22楼: |
弱弱问一下帖中高手,EMB力推的DATASNAP能稳定地支持多少并发?很想用它,但心中没底
----------------------------------------------
DELPHI编程爱好者
|
作者: |
|
2014/9/15 10:08:10 |
23楼: |
to yemny 你的意思是用delphi搞ISAPI还是直接用php之类的?
----------------------------------------------
-
|
作者: |
|
2014/9/15 12:50:06 |
24楼: |
那么多现成的服务器,为何要自己写?就是用来证明自己有多么牛逼么, 相信这里大多数写代码的目的都是为了糊口。 如果你就想钻研技术就当我没说。 经过市场考验的产品才是值得信赖的。 无论php还是isapi,都只要关注业务逻辑即可,并发和稳定你大可以交给你iis来做。 业务逻辑还是倾向于php,出了问题你只要检查你的业务逻辑有没有问题即可,脚本化的东西修改也方便。
----------------------------------------------
-
|
作者: |
|
2014/9/15 13:17:56 |
25楼: |
lwsxln
14楼: to luckyrandom 用INDY的TCPserver的话,1个client和1W个client肯定是有区别的。他每来一个client都会启动一个线程直到断开。
奇怪,为什么一个CLIENT要启动一个线程。。。不就是接收个消息嘛 偶没玩过INDY TCPSERVER,若真是这个机制,那说明选错了工具
----------------------------------------------
SQL SERVER DBA QQ:315054403 曾经的Delphier 缘在上海
|
作者: |
drroc (mvcxe) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/9/15 16:31:27 |
26楼: |
建议使用HTTP短链接。
因为你的情况网络情况复杂,用TCP长链接/UDP广播都不太适合。
如果选用HTTP,那就是说你需要写WEB服务,别用webservice,性能太差。http通信用json就行了,也就是俗称的RESTful
以下是广告: 也可以用MVCXE WEB Framework
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
|
作者: |
|
2014/9/30 9:15:14 |
27楼: |
diocp3-服务器的连接上限是到底是多少?diocp3的一个装13测试(8W连接数)
测试DEMO地址: http://www.diocp.org/?p=103
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/9/30 11:22:36 |
28楼: |
27楼 仅仅连接 有没有试过现时查询数据什么的啊
----------------------------------------------
-
|
作者: |
drroc (mvcxe) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/9/30 16:29:30 |
29楼: |
楼上有所不知,能量化的只有连接数,你说有查询数据的情况跟你的查询代码,跟数据库有关,与diocp没关。
27楼展示的是同时在线能力与管理调度这些连接的开销。
总的来说这个diocp的性能非常棒.
不过楼主要求的不是同时在线,delphi自有控件都能满足,所以够用就好。
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
|
作者: |
|
2014/9/30 17:07:52 |
30楼: |
嗯,谢谢楼上(29)帮忙解释,
上面只是一个连接数测试。点击连接可以看到一些文字。
----------------------------------------------
DIOCP官方社区|MyBean官方社区http://www.diocp.org/
|
作者: |
|
2014/10/8 13:53:23 |
31楼: |
你的需求很简单的! 1、客户端的数据采用Jason协议封装,然后使用BASE64转码,并进行ZIP压缩,这要可以保证数据量较小,同时避免乱码的出现。 2、通讯协议使用HTTP,注意都是短连接,长连接是不现实的,尤其是在使用移动网络的情况下。 3、服务端采用多线程编程,每个线程单独处理一条请求。 4、为了避免线程数过多,可以使用缓冲池将请求的数据临时保存(数据库也可以) 5、尽可能的不要使用第三方提供的控件,这样可以保证最大的兼容性和稳定性。 6、要会分析需求,你的需求中没有说一定在服务端把所有的操作都处理完才返回客户端,所以可以采用异步机制,一个负责接收数据,接收到存储后立即返回,另一个可以是一个单独的程序,专门负责处理各种数据请求。
PS:1万个客户端请求不是很多,不要被数字吓住,我这里高峰时段的客户端对服务器的请求比你的高多了!
----------------------------------------------
-
|
作者: |
drroc (mvcxe) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/10/8 14:02:25 |
32楼: |
楼上不嫌烦吗,json然后base64再zip,直接json不就完事了
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
|
作者: |
|
2014/10/8 15:38:33 |
33楼: |
楼上的同学你考虑到过流量和字符集的问题了吗?
如果包很大,如何控制流量? 如果有中文字符,如何保证不同平台上不出现乱码?
----------------------------------------------
-
|
作者: |
drroc (mvcxe) |
★☆☆☆☆ |
-
|
盒子活跃会员 |
|
2014/10/8 15:59:25 |
34楼: |
好吧,我被你打败了,先了解一下base64后会令字符串增大多少再说。
至于乱码,先了解一下json再说。
----------------------------------------------
MVCXE中国首个DELPHI MVC WEB框架:https://www.mvcxe.com/
|
作者: |
|
2014/10/13 11:00:22 |
35楼: |
好贴
----------------------------------------------
-把学习当信仰
|
作者: |
|
2014/10/13 11:25:56 |
36楼: |
还是从硬件层上去做服务器集群来得简单
只是需要很多钱
----------------------------------------------
我84砖家
|
作者: |
|
2014/10/13 12:02:02 |
37楼: |
想软件实现硬件的活——提升有限。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
|
|