我用现在写的一个软件里面要求多个(1-500)客户端连接服务器,
服务端用Remote Data Module+ScktSrvr.exe
客户端用SocketConnection+ClientDataSet本来一切正常的(在客户端连接数少的时候)
一但客户端增加到68个以上时,就出现错误,在客户端提示:未指定的错误很问高手们有没有方法解决,是不是用ScktSrvr.exe就只能连接68台
我调试过是ScktSrvr.exe里面抛出来的错误
如果ScktSrvr.exe不能满足我的需求,有什么好的解决方案,前提是客户端尽可能少改动
服务端用Remote Data Module+ScktSrvr.exe
客户端用SocketConnection+ClientDataSet本来一切正常的(在客户端连接数少的时候)
一但客户端增加到68个以上时,就出现错误,在客户端提示:未指定的错误很问高手们有没有方法解决,是不是用ScktSrvr.exe就只能连接68台
我调试过是ScktSrvr.exe里面抛出来的错误
如果ScktSrvr.exe不能满足我的需求,有什么好的解决方案,前提是客户端尽可能少改动
解决方案 »
- 怎么检查打印机是否连接正常
- 请各位大侠帮忙看看小虾的程序那儿错了!(图片查询显示问题)
- delphi动态数组在JAVA中怎么表示
- 怎么获取动态创建的TImage所载入图片的路径,显示在另外一个不是动态的Timage里?
- 大哥,帮我一把吧
- ERP是什么,全称呢?
- [***sos***]哪位大虾给我讲讲fastreport的demo中memo&picture例子,没有script怎么实现的?
- 怎样防止程序启动后,第二次又启动!
- 请问<<Delphi 5 从入门到精通>>
- 请教当用按钮来执行外部程序时,如果执行文件不存在时的问题
- 请问如何在Delphi开发的Service 程序里得到Service可执行文件名?
- 如何获得局域网内的sql2000数据库名称
2.制约RPC(远程过程调用)客户数的另外一个问题就是操作系统当中的线程的共享,而对于一些阻塞性函数,那么这个就会成为一个关卡.你说你的系统可以负载1万个用户,那万一这一万个用户当中有1000个用户在执行一个阻塞过程,那么是否意味着就会有一千多个线程被占用,那么系统又还能分派出多少个线程出来给剩下的九千个用户使用?而是否这九千多个用户还有可能存在阻塞?远程过程调用,本身可以很好地处理封装问题,但是这个封装的缺陷,肯定制约着相应的应用逻辑.早先刚听说完成端口如何如何强大的时候,确实有设想过使用I/O完成端口来对Borland Socket Server进行相应的改进,但是这种封装所存在的串行阻塞,正好与完成端口当中的并行化拆解形成一个无法统一的局限性.而另一个全局的内存管理器,在MPS当中的并行线程竞争导致性能的下降(测试结果表时,在一个MPS系统当中,分派给一个高并发服务的Delphi程序多个CPU执行单元反会相比分派给它单一一个CPU执行单元性能更低,而且低得不只是一点点).而处理这一个问题的办法则是在非必要使用默认内存管理器的地方采用独立的内存管理机制,对一些经常性创建和销毁的类,进行对象池化以重用现有对象来达到性能上的提升.对于远程过程的调用,则换原来的进程内COM或DCOM为COM+(COM+当中对COM的调用有相当的优化,当用户增加时会自行开启一个DLLHOST进程来承载,从而省去了一些进程级限制所带来的麻烦).
如果需要做成三层结构,建议自己做一个中间层,作为数据转发的程序,客户端每次取完数据立即断开释放资源,这样就可以保证数据库的稳定性
我自己做了一个SOCKET server,在服务器端对查询结果动态打包然后传递给客户端,客户端解包后传递给clientdataset,效果不错。
另外,DELPHI写完成端口,稳定性是一个问题,网上能够找到的,或者我自己写的,都可以用工具压垮。但是我用VC写的模型,可以固若金汤,服务器每天200人左右,几个月都没有问题。
webservice也是短连接的
不知道是什么原因,unsigned兄知道吗?
是exe的形式运行服务
用數據庫連接池
可以兼容 SocketConnection 嗎?
其实我就是将一张表生成一个树形,而且树的层任意个,我能想到的只有这种循环去查表建树,
unsigned 老哥有生成树的代码分享下吗
1 1 开发部
2 2 营销部
3 3 服务部
4 1 网络开发
5 1 数据库开发
6 4 张三
7 5 李四
8 2 王五
9 3 何某在我的软件里的TreeView里显示成:开发部
+-网络开发
+-张三
+-李四
+-数据库开发
营销部
+-王五
服务部
+-何某用这一张表就可以建出无限制层数的树,只是我建的方法比较笨,我是从树顶开始递归查询去建的,
不知道哪个大侠有没有更好更快查询更少的办法吗,请不吝赐教
1 1 开发部
2 2 营销部
3 3 服务部
4 1 网络开发
5 1 数据库开发
6 4 张三
7 5 李四
8 2 王五
9 3 何某 在我的软件里的TreeView里显示成: 开发部
+-网络开发
+-张三
+-数据库开发
+-李四
营销部
+-王五
服务部
+-何某 用这一张表就可以建出无限制层数的树,只是我建的方法比较笨,我是从树顶开始递归查询去建的,
不知道哪个大侠有没有更好更快查询更少的办法吗,请不吝赐教
+-网络开发
+-张三
+-数据库开发
+-李四
这个可以看成是(假设三阶):
开发部 #NULL #NULL
开发部 #网络开发 #NULL
开发部 #网络开发#张三
开发部 #数据库开发#NULL
开发部 #数据库开发#李四
cds.frist
Isfound:=false
while not cds.eof do
begin
Isfound:=false
for i:= 0 to TreeView.Items.count-1 do
begin
if TreeView.Items[i].Text = cds.fieldvalues['did'] then //这个地方可能每个节点需要一个结构体存储id,did,caption信息
begin
TreeView.Items[i].addchild()
Isfound:=true;
break;
end
end
if not isfound then
treeveiew.add() //根节点增加
cds.next
end//cdsn 论坛的文本编辑器真是太差了
谢谢你提供的方法;
你的方法对我上面说的情况来说是可以的,由于我的疏忽,我以为上面的那表达我的意了,结果还是忽略了一样东西
那就是排序ID DID Sort Caption
1 1 1 开发部
2 2 2 营销部
3 3 10 服务部
4 1 4 网络开发
5 1 5 数据库开发
6 4 6 张三
7 5 7 李四
8 2 8 王五
9 3 9 何某
10 10 3 业务部
11 10 11 彭某Sort 在新建时=ID值,在用户自定义排序时(提供上移和下移功能,移动其实就是让两条数据的Sort值交换达到目的)因此排序只能用Sort排,但又有个问题,只按Sort排还不够,就像上面的,ID=3的Sort是10,而其下级人员何某ID=9,Sort=9(这各情况只需用户将业务部上移,则Sort与服务部交换)那就变成下级排在上一级前面,用你的建树方法时也就让何某变成了根结点了。我现在就是用你的方法,但是加上了递归,就是在第一次查到的结果中操作,速度是快了,但总感觉我的递归写的不够好你有什么高招能解决一下吗?这贴我马上就要结了,提问题的主要内容不需要解决了,因为我决定用ASTA或RemObjects用实现,现只想解决这个树的问题。
注:unsigned兄,你的分不会忘记给的 :) 谢谢你的热情。
a0.caption,a1.caption,...a[n-1].caption,a[n].caption
from
mytable as a0 /*顶级*/
left join mytable as a1 /*二级*/
on a0.id=a1.did and a1.id<>a1.did
...
left join mytable as a[n] /*第N级,N是有限制*/
on a[n-1].id=a[n].did and a[n].id<>a[n].did
where a0.id=a0.did按上面这个查询,一次可以查N阶,由于关联,自动进行了排序,并且join可以很好地利用索引进行快速的检索。这里的顶级,只要修改一下条件,可以从第N阶开始作为当前查询的顶级节点。
我认为DID字段应该是本记录的父节点的ID,如果没有父节点DID=0
“Sort 在新建时=ID值”我认为应该改成:Sort 在新建时=(select isnull(max(sort),0)+1 from 表名 where did = 本记录.did )因此根据我的定义方法:ID DID Sort Caption
1 0 1 开发部
2 0 2 营销部
3 0 3 服务部
4 1 1 网络开发
5 1 2 数据库开发
6 4 1 张三
7 5 1 李四
8 2 1 王五
9 3 1 何某
10 0 4 业务部
11 10 1 彭某关注楼主的帖子是因为我也在用SocketConnection开发应用,目前还没有68个客户端,所以还没有发现楼主的那样的问题,但以后可能会面临类似的问题,所以非常关注楼主这个问题的解决方案,如楼主最终用了什么好方案还希望能够告诉我。呵呵。关于三层我还有些问题没有想到好的解决方案,希望能够向楼主请教。我qq:12470312 一般在线隐身
email: [email protected];[email protected]
最上一行sql语句:
select * from 表名 order by did,sort