请教关于完成端口的模型的 SocketServer 服务器,急急急!十万火急!1000两银子重金求助!(200分)

  • 主题发起人 主题发起人 superatom
  • 开始时间 开始时间
S

superatom

Unregistered / Unconfirmed
GUEST, unregistred user!
Socket的完成端口模型效率是比较高的,但是编程相对复杂,我现在有一个三层架构的应用,比较牛X的服务器也只能带十几个客户端(数据量较大),CPU占用率就达到了100%,而且此时服务器变得非常不稳定,客户端基本都连接不上,我采用完成端口模型写了一个Socket服务器,但是当多个客户端同时访问时,客户端程序会报“应用程序调用一个已为另一线程整理的界面”的异常,我真是百思不得其解,苦熬几天后终于发现是因为采用完成端口后,服务器端在接收到数据后会调用不同的线程进行处理,而服务器端的服务对象是在其他的线程中创建的(因为是随机的),也就是服务器端的服务对象被不同的线程执行了,所以出现了问题。
以上是我的初步分析,还没有找到解决的途径,真是急死我了,那位高手能帮我解决此问题,我将奉送1000大元,决不失言。如果解决将另开帖子送分。
 
老大你用完成端口,应该只建立很少的线程,你怎会搞那么多线程呢?建立那么多线程还要完成端口做什么?一般用完成端口做服务 2 个线程足以(一个是程序的主线程,一个是工作线程)
 
一个工作线程是肯定不能满足需要的,因为工作线程除了进行数据的收发外还要进行数据的处理,工作线程在接收完数据后,要对数据进行处理,如创建对象、Invoke等等,也就是要调用服务器的业务组件,这个操作是比较耗时的,一个工作线程当然不能满足要求了。
 
候捷说线程数最好是 CPU个数 + 2,不过也有说 CPU个数 * 2
但是不管怎么说,也不会多到十几个吧:)
 
服务线程当然没有十几个,但是即使只有两个就不行。
 
多个线程终于搞定了:)

感谢beta 和 delp 对此问题的关注
 
多人接受答案了。
 
楼主能将解决方法及部分代码贴出来吗?让小弟长长见识
 
后退
顶部