关于SOCKET多线程编程的问题!

小巫子 2014-06-19 05:54:24
C++ MFC
目的:2个数据库表数据通过网络同步。
我的想法:
服务器端程序:监听来自客户端的连接,对每一个连接开一个线程处理,服务器读取数据库数据,分包发送给客户端。

客户端程序:SOCKET接收数据部分 开线程处理,收到数据保存至数据库,并上传本地的部分表至服务器端。

可能1条SQL语句查询的数据需分多包发送。

服务器端和客户端交互命令及数据,如:客户端-》服务器一条命令后,等待服务器回应(收到回应后继续发下一条命令),然后服务器-》客户端一条命令,等待客户端回应。
也就是实现一发一收的同步过程。

请各位大侠提供点思路或者socket服务器端多线程编程的源码参考下。
...全文
810 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyscs0000 2014-07-09
  • 打赏
  • 举报
回复
1:不建议每个连接就开一个线程,如果很多的成千上万个那不得死啊 建议先看下socket的网络模型 2:网络模型的话 如果你的通信量很少的话 就用异步通信,或者完成例程,通信量大的话还是完成端口比较好点,我建议不管负载大小都用完成端口。源码的话你就搜索一下 网上到处都是的。原理什么的一两句说不清楚 3:多包发送的话 要处理分包连包的问题吧,这个你也得注意了。 4:数据同步这一块说简单也简单说难也难,这个问题,如果你的连接很少的话那都没有问题的,网上找些源码改一下就好了,但是数据量很大,连接非常多的话 那就有很多问题了。包括网络延迟,服务器负载都要考虑进去的。修改数据的话尽量在表里加个时间字段什么的标记,或者直接在表里面做个判断,不然 虽然多线程同步,但是有时候网络延迟包括cpu处理的速度,会让线程多次修改读取数据库的数据不一致,打个比方,a线程修改数据库,把命令数据投递到消息队列,然后线程结束 释放互斥对象,这个时候B线程得到互斥对象调用数据库里的数据,如果现在网络延迟或者CPU超负荷还没处理完A线程的命令,那么数据库里的数据还没有修改。与内存中的数据就不一致了。 5:我过年辞职回家了,现在在家带小孩 开个网店,帮忙点击一下啊 ,进去看看,卖面膜的,如有需要可以买个给老婆女朋友贴贴,http://item.taobao.com/item.htm?spm=a1z10.1.w7394523-7822789539.2.vxL44X&id=39896797127
zdrone 2014-07-08
  • 打赏
  • 举报
回复
简单点用消息模型,如果并发量好就iocp 这个应该不是很复杂 。
worldy 2014-06-30
  • 打赏
  • 举报
回复
socket多线程,百川归海,就是IOCP
xian_wwq 2014-06-30
  • 打赏
  • 举报
回复
引用 8 楼 wanli_357 的回复:
[quote=引用 3 楼 fishion 的回复:] 可以看看“Windows Socket五种IO模型”
有相关资料吗[/quote] http://blog.csdn.net/woshinia/article/details/8585930
小巫子 2014-06-27
  • 打赏
  • 举报
回复
引用 3 楼 fishion 的回复:
可以看看“Windows Socket五种IO模型”
有相关资料吗
小巫子 2014-06-27
  • 打赏
  • 举报
回复
引用 5 楼 shenyi0106 的回复:
数据库同步还需要自己做吗? 现在大中型数据库都带有同步数据功能啊? oracel中有个同步复制的功能,可以实现数据库同步。 mysql也有一个叫双机热备功能可以实现同步。 sqlserver我不太清楚,不过我觉得它的数据同步应该更简单(毕竟是windows的吗)。
数据库自带的同步功能是针对相同结构的表之间数据同步;我这个主要是想将各个数据库相同结构的表放在一个总的数据库中并标记是来自哪个数据库;
shenyi0106 2014-06-23
  • 打赏
  • 举报
回复
还有,你的这个需求,其实socket部分是最不重要的部分。 关键部分是,如何保证断点续传(保存恢复),如何保证服务器数据库(应该相当于一个总数据库)中的数据一致性(不出现重复,混乱,数据顺序一致等问题)
shenyi0106 2014-06-23
  • 打赏
  • 举报
回复
数据库同步还需要自己做吗? 现在大中型数据库都带有同步数据功能啊? oracel中有个同步复制的功能,可以实现数据库同步。 mysql也有一个叫双机热备功能可以实现同步。 sqlserver我不太清楚,不过我觉得它的数据同步应该更简单(毕竟是windows的吗)。
信阳毛尖 2014-06-23
  • 打赏
  • 举报
回复
引用 3 楼 fishion 的回复:
可以看看“Windows Socket五种IO模型”
+1
zhousitiaoda 2014-06-20
  • 打赏
  • 举报
回复
TCP select。。。
oyljerry 2014-06-20
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_5165d4cf0100slkh.html http://blog.csdn.net/xinxijisuan/article/details/6227961
fishion 2014-06-20
  • 打赏
  • 举报
回复
可以看看“Windows Socket五种IO模型”

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧