李维的Borland传奇Page 86 中说的“SocketConnenttion”未达到真正应用水准(100分)

  • 主题发起人 主题发起人 codee
  • 开始时间 开始时间
C

codee

Unregistered / Unconfirmed
GUEST, unregistred user!
李维的Borland传奇Page 86 中说的“SocketConnenttion”未达到真正应用水准,哪位大侠可以改改这个源代码?因为DCom太难配置了,我偏向于使用无配置的SocketConnenttion”
 
你测试了没?有什么问题?很多人都用过socketconnection,为什么没有这么说?
 
一般没有问题,除了:
1。多用户同时提交数据,会出现“找不到接口”
2。如果服务器端口采用某个加密的dll,客户端用了另外的加密的dll,SocketServer可能会无故退出
 
>>>>>1。多用户同时提交数据,会出现“找不到接口”
沒遇到過,至少40多個用戶用的時候沒發現這個問題
 
你说的40个用户,是不是同时操作的?我们是绝对同时的!
 
好像没有发现从在" 找不到接口的问题”
是不是其它原因
 
有没有人考虑过用indy重写,我是心有余而力不足,
完全搞不懂socketconnect的机制,我真是太笨了
 
1.Don't use socket server - it's a bottleneck. Either rewrite it or use DCOM.
2.Use tmFree threading.do
n't believe what you have read or heard about the requirement to use tmApartment threading.
3.Use a SMP system. If you run a with 60+ connections (60+ threads), the overhead of context switches will kill your system.
More CPUs = less context switching. I typically use a 4 way system with the config described in #5.
4.Use a third party memory manager. Reduces context switching and page faults. Editor's note: Here's one.
5.If you use a SMP system, place the DataSnap server and the InterBase server on the same box. I typically gain a 100%
increase in performance by avoiding the overhead of network traffic this way.
If you use a 4 way system, dedicate 2 CPUs to the DataSnap server and 2 to the InterBase server.
This will further reduce context switching, but you should experiment with this config as your load
distribution may be different than mine.
以上为转贴
实际中还没遇到什么问题,我现在刚进的公司全是用socket做连接的,没见他们反映有什么问题(并发的最大数量为50),不过他们是ShareConnection+SocketConnection.
我看过一点SConnect的源代码,主要是一些基于TClientSocket和TCustemWinSocket来实现通信,估计也没什么大问题。
 
我也有100个并发,基本上没有问题
 
赞同李维的这一观点,[Modified] DCOM在一个规划良好的网络当中也并不难配。
重写TSocketConnection?权衡起价值与难度的关系,恐怕不值得这么做,连Borland都不打算对它进行怎样的改造。
 
请教Sachow,Dcom可以穿透Internet?
 
http://new.playicq.com/datanew/18265_borland_socket_server_fixed_d5_to_d7.zip
Borland Socket Server 有bug,这是改进版本。下载自BDN(http://bdn.borland.com/)
 
to codee:Windows 2000 Server以上的版本中有一项COM Internet服务,可以使DCOM通过80端口在Internet上运行。这一点是在《Windows 2000安全Web应用程序设计》一书上得知的,现在暂时还没有实践过,但幸运的是在下个星期的工作中我即使实践此功能。
 
DCOM的底层协议也是走的TCP(当没有NETBEUI)时,所以不存在DCOM更稳定,而且DCOMCONNECTION也不过使用了DCOM的通讯机制,实际上最后还是走的SOCKET,不信你们可以在DCOMCONNECTION连接前后,用NETSTAT -AN查看TCP的连接(在客户端),你们会看到多了几个TCP的连接
 
楼上看看TSocketConnection,TDCOMConnection的源码就知道,都只实现了其通讯部分,跟应用没有任何关系,所以也不存在所谓的容错处理
在MIDAS这一层有一个接口,任何对象只有实现这个接口就能完成MIDAS的实现,明白吗?
 
追溯TDCOMConnection和TSocketConnection,是看到他们有同源性。
用TSocketConnection来连接AppServer毕竟是多了socksrvr这一层,我自己用TSocketConnection很少,因此也拿不出足够的证据来评价它的稳定性,其它朋友也许有更多的心得。
我的项目中都是将业务逻辑封闭在组件方法中,客户端直接采用COM的调用方法(不是通过AppServer接口来调用),在分布式环境中,它实际上是直接通过DCOM协议进行调用的,我的感觉是:性能和稳定性都相当好,安全性就更不用说了(这一点恐怕没人能否认吧?)
如果我们在稳定性问题上已经消除了争执,那么安全性是否是企业级应用中的一个重要环节呢?
 
我最注重稳定,安全性自己用程序解决。
说实在的,我连局域网配置DCom也不懂。有时也懒的学,能用一门就行。典型的懒人。所以我只会Delphi(半桶水),不会C#,Java等。以前喜欢理论物理、佛教
 
我觉得TSocketConnection还是比较稳定的,安全性问题它提供了一个接口,通过设置
TSocketConnection.InterceptName属性自己加密和压缩数据,就是麻烦点,但比起DCom来好用多了
 
不知大家是否试过在下面这样的复杂环境中使用TSocketConnection:有两台域服务器上运行着两套不同的系统,其中要做接口,A服务器要调用B服务器上的方法,但由于A服务器上的系统很老,维护力度也不大,只能调用标准的DLL,却不能调用COM。于是,我只能做一个DLL,在这个DLL里做一个COM客户端来调用服务器端的接口。由于两台服务器都是独立的域控制器,直接用DCOM的调用不方便,于是我想到了用TSocketConnection。我在DLL的程序入口中加入了CoInitialize(),初始化数据模块及TSocketConnection的实例,再Open,结果——进程始终处于阻塞状态,没有任何响应,这时服务器端已经是执行了scktsrvr的。之后我在其它的两台计算机上用标准DCOM的方式调用(不是TDCOMConnection),获得了成功,尽管我还没有在最复杂的情况下(调用者以多线程方式调用此接口DLL)完全处理成功(在调用者的窗体关闭后进程却没有终止),但这一成功已经表明DCOM在处理非常复杂的应用时,仍然能应付自如。
 
后退
顶部