ServerSocket方面(100分)

  • 主题发起人 主题发起人 赛特
  • 开始时间 开始时间

赛特

Unregistered / Unconfirmed
GUEST, unregistred user!
非阻塞方式下,如果ServerSocket的OnClientRead应答多个ClientSocket同时发来的消息,请问:
1、ServerSocket是将ClientSocket同时发来的消息进行排队一个一个处理呢,还是同时处理?如果是同时处理,ServerSocket的OnClientRead里面定义的局部变量在同时处理时会互相有影响吗?
2、如果是同时处理,ServerSocket的OnClientRead里面使用了同一个ADO控件访问数据库时,会互相有影响吗?
3、ServerSocket的连接量最好控制在多少以内?
能否给个非阻塞方式下,多线程的例子呢!(一个框架就可以了,OnClientRead里涉及adoquery访问数据库)
saite006@sina.com
非常感谢!
 
我只是听别人谈起过,如果有多个连接的话,要创建线程,每个连接一个线程
 
那仿佛是阻塞式的工作模式
 
局部变量是没有影响的。全局变量才应考虑线程同步。
 
这种非阻塞方式下,怎样实现线程和线程同步呢?能否说得具体些或者给个例子呀,谢谢!
saite006@sina.com
 
1.阻塞方式当然是多线程,你说的排队也是可以的(单线程)但效率低下。
2.如果是多线程,用ado,每个线程创建独立的 连接,独立的dataset/query, 显然效率比较低,那么就需要数据库连接池,那么连接池里面当然需要有1个连接 +1个以上的query,
然后每个客户连接克隆这个组合, 连接池当然就需要同步/互斥锁,临界区管理。
一般是客户连接处理的地方 lock ,使用,再unlock (连接 + query的对象组成的池,如果需要其他数据结构的池,同样处理)
3. 连接量, windows 大约能够处理 2000个,但要看你的服务器程序的效率。
 
能否给个非阻塞方式下,多线程的例子呢!(一个框架就可以了,OnClientRead里涉及adoquery访问数据库)
saite006@sina.com
非常感谢!
 
全文检索中N多!
 
网上试了个例子,不成功啊!
 
看看Win32核心编程指南或Jeffery Ritchie的Windows程序设计里多线程。线程同步相关章节。我们给的代码跟网上的也一样。你不懂就是因为你太白痴。
 
LZ,遇到我问题和我差不多,用ServerSocket连接数据库操作时,不同步会出现未知的错误,我试过临界区,互斥但长时间工作后还是有问题,还没解决。。。帮你定,大家一起学习。
 
地质灾害 去你妈的,你他妈的懂完了吗?别他妈的在论坛上吃不完要不完的屁样子到处教训人!请先学会尊重人,先学会做人好吗!!
 
1、ServerSocket是将ClientSocket发来的消息进行排队!
2、就算是非同时处理,ServerSocket的OnClientRead里面使用了同一个ADO控件访问数据库时也会互相有,这要你在server段的触发器如何控制了!
3、ServerSocket的连接量最好控制在200以内!
否则要用indy,也最好控制在500以内!
否则要完成端口,麻凡了!
 
To wql:
非阻塞方式下,既然Serversocket是将多个clientsocket同时发来的消息排队处理了,而非同时处理的,那么在onClientRead里用了adoquery就应该没有互相影响了啊?如果还是互有影响,那该如何控制呢?非常感谢!
 
地质灾害就是一个大垃圾!
估计父母双亡,所以没有教养!
 
原来小李子你父母双亡啊。难怪无依无靠总是跟着我。哎,以后多给你几块骨头吃了。真是条可怜的旺财。
 
To wql:
非阻塞方式下,既然Serversocket是将多个clientsocket同时发来的消息排队处理了,而非同时处理的,那么在onClientRead里用了adoquery就应该没有互相影响了啊?如果还是互有影响,那该如何控制呢?非常感谢!
 
这个就是接收之后按client保存起来! 分析数据包处理就可以了!
 
非阻塞方式下,Serversocket是将多个clientsocket发来的消息交给你处理,不排队,也不同时,除非你的onClientRead是握手方式:
接受消息
处理(ado query)
返回处理完毕消息给发送端
否则一切处理都在服务端的触发器上!
 
我现在就是把处理代码全部直接写在onClientRead里面的,处理了马上就回复消息给ClientSocket。你的意思是在onClientRead里面只是接受ClientSocket的请求,然后在其它地方排队处理,再发结果回去?
那你看这样做可以吗:在onClientRead里接收到请求后,就将请求排进数组;然后有一个Timer专门监视这个数组,如果有新加入的请求就一个一个按顺序处理并发送结果给ClientSocket?这样的话,整个处理过程就排队了,并且不会互相干扰了。或者把Timer改成一个线程,这个线程专门负责监视并处理onClientSocket接收到的请求?
非常感谢!
 
后退
顶部