求实现服务端软件的思路
主要功能是同时服务多个客户端(可能上百个),服务内容为对数据库增删改查。
我个人的思路是:通过socket连接客户端--》接着为各个客户端(socket)创建一个线程--》接着通过ADO操作数据--》最终将所得数据传到客户端。
对于以上的思路有几点担心的问题:
1,socket采用什么样的工作模式模式。
2,是创建一个线程池供大家使用还是需要的时候在各自创建。
3,ADO多线程操作数据库是否安全,会不会导致内存泄露。
请教各位是如何设计这样的一个服务端软件呢,给个大概思路,能写详细点最好了。同时对我的自己的思路能否给些建议或者评价。 谢谢!七夕节快乐!
[解决办法]
数量肯定是要控制的,否则你可能承受不了。我更担心的是这些增删改的互斥
[解决办法]
1.多线程 + 阻塞模式 这种方式实现最简单 效率也不错 不过就是频繁创建销毁线程比较恶心
2.对于百级的客户端 并发不是很大的情况下 WSAAsyncSelect完全可以满足 这种方式的好处是异步接收消息 而且不需要额外线程 不过性能瓶颈不在带宽 因为这个是靠界面消息
3.可以考虑用WSAEventSelect 或者 select模型 不过这种模型每次轮询的个数有限制 即使你从新定义了FD_SIZE也会有性能瓶颈
4.就剩下完成端口了 不过对于你这个级数的客户端 和 并发量 完成端口就是浪费脑细胞
另外 创不创建线程池我认为是无所谓的 操作数据库我建议你创建一个连接池 这个资料太多了 我就不说了
希望帮到你
[解决办法]
增删改的互斥 别的我不了解 至少oracle 或者 mysql都有自己的锁
[解决办法]
1.服务器端,Select模型是不错的选择,还不用考虑多线程
2.线程池没必要,这东西存在感觉最主要是霸占资源,就是为了不让其他程序抢占你的资源,导致你程序不能用,资源充分的情况下,不用考虑。
3.ADO,你啥数据库呢?说一下。
关于增删改互斥:搞个定时提交吧,这段时间内容用户对数据库的操作弄成一个集合看看
[解决办法]
select或者IOCP模型两个考虑一个。
我曾今写过为每个客户端维护一个线程,代码很好写,但是经常会有意想不到的问题。
4楼主意不错,是让你将“增删改”操作不要在数据源上操作,先在一个副本中“增删改”之后,然后统一提交到数据源上。