有一个项目:多客户端(几百个),服务端采用socket监听,把客户端的数据写入数据库,如何保证客户端数据不丢包和服务器数据库的写入不会产生并发错误(或者各数据都能够完整的写入数据库)。
请大家提提思路,不胜感谢!
我的思路:服务器采用多线程,如果listen到客户端请求,就开一个线程处理数据写入数据库,但是这样的结构会否出现数据库的并发写入冲突问题呢?

解决方案 »

  1.   

    几百个连接的话,用异步网络模型也可以了,当然用重叠IO,IOCP也行
    如果listen到客户端请求,就开一个线程来处理的话,线程的创建跟销毁会有消耗的,用线程池实现下
    至于数据库,我也用得不多,用事务的话应该不错吧
      

  2.   

    请教线程池大概怎么实现呢?
    遇到一个新问题:多个线程用共享ADO链接访问数据库出现错误:链接占线导致另一个hstmt
    请问这个问题怎么解决好?因为不可能为每一个线程都开一个数据库链接吧?好像跟线程池有关联
      

  3.   

    ..线程池简单的可以用IOCP模型来实现使用
      

  4.   

    我的意思是服务器上处理多个线程同时写入数据库的问题,只用一个数据库链接不会产生冲突吗?我现在只用一个数据库连接,偶尔出现冲突(ado),故障代码:链接占线导致另一个hstmt
    难道每一个线程都要建一个连接?
      

  5.   

    1、ADO效率低,且单一ADO连接在多个线程中使用不好互斥。解决方法可以使用本身就支持数据操作互斥的数据库以及更低级的数据库接口,比如如果你用的是oracle,则可以考虑直接使用OCI,提高效率。
    2、如果服务器端对每个请求的服务都很简单的话(比如仅仅是回复一个简单的“Ok”),就没必要为每个服务都开个新线程,这样确实效率低(开关线程本身耗费资源),且高并发情况下服务器端负担重(几百个连接就开几百个线程?),可以考虑非阻塞模式,服务器端单线程搞定,毕竟几百个连接不算多,效率影响不大。
      

  6.   

    相当于你的服务器做了MTS的事情,那在写入的时候交给一个线程写,就不会有并发的问题了。相当于proxy吧。