VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 110|回复: 7

数据如何转发?转发数据端应该怎么写?

[复制链接]
35_avatar_middle
最佳答案
0 
online_vip 发表于 2020-2-7 17:16:13 | 显示全部楼层 |阅读模式
数据如何转发?转发数据端应该怎么写?




大伙看这个图,转发端就是转发数据用的。
里面有两部分组成,一个的转发服务器端,一个是转发客户端
当用户端链接转发服务器端的时候,就会new一个链接客户端出来,来链接远程服务器
收发数据的时候也是一样的。

下面来看一下部分代码:
数据如何转发?转发数据端应该怎么写? 数据如何转发?转发数据端应该怎么写?




这两张图,当用户链接转发服务器端的时候,在 SO_ACCEPT 就会new pTcpClient 出来,客户端是使用select模型写的,很简单。
如果用户有数据的话,SO_RECEIVE 就会收到,之后PPerIoData->pTcpClient->SendMsg(PPerIoData->Buffer);直接发送给远程服务器,那么如果远程服务器有数据的话
pTcpClient->m_TcpSever->SendMsg(pTcpClient->m_ConnID, szBuf, (DWORD)iRet);

这样子转发是否可以行?因为使用的是转发服务端使用完成端口来写,转发客户端使用select来写的,直接这样子转发的话会不会出现意想不到的问题?
效率怎么样?




上一篇:mfc编辑框中显示系统本地时间
下一篇:GetSubItemRect为何无法获取0列的信息
35_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-7 17:22:03 | 显示全部楼层
还有一个问题:如果说,有100个用户链接到 转发服务端,就需要开启100个客户端,也就是100条线程来收包?这太浪费了吧,有没有什么办法可以用更少的线程来管理这100个客户端的收包线程?我还没学过在同一个.exe执行程序中,同时开启100个客户端,用一条或者多条线程来管理数据收发。
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-2-7 19:50:50 | 显示全部楼层
如果socket基础比较扎实的话 看看完成端口模型,以及gh0st的传输内核,  对你会比较有帮助
35_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-7 20:12:08 | 显示全部楼层
wl1383838438 发表于 2020-2-7 19:50
如果socket基础比较扎实的话 看看完成端口模型,以及gh0st的传输内核,  对你会比较有帮助

CreateIoCompletionPort 和 GetQueuedCompletionStatus 可行?
51_avatar_middle
最佳答案
74 
online_admins 发表于 2020-2-7 21:25:10 | 显示全部楼层
客户端也可以用完成端口,但是本身完成端口是针对高并发,多连接的情况,所以用在客户端对于性能提升不是很大。本身服务器是一对多,客户端都是一对一,或者一对二,等等,所以感觉客户端对于完成端口的需求不是很必要
35_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-7 22:00:45 | 显示全部楼层
Syc 发表于 2020-2-7 21:25
客户端也可以用完成端口,但是本身完成端口是针对高并发,多连接的情况,所以用在客户端对于性能提升不是很 ...

我建立的客户端SOCKET了以后,我直接都关联CreateIoCompletionPort,这样的话,就算我建立500个客户端链接各种不同的服务器,都可以管理,不然创建的线程太多了
51_avatar_middle
最佳答案
74 
online_admins 发表于 2020-2-8 00:17:11 | 显示全部楼层
cheating_plugin 发表于 2020-2-7 22:00
我建立的客户端SOCKET了以后,我直接都关联CreateIoCompletionPort,这样的话,就算我建立500个客户端链 ...

异步I/O模型有很多种,并不是都必须用完成端口,也并不是客户端多了就要为每个客户端创建一个线程
35_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2020-2-8 01:16:14 | 显示全部楼层
Syc 发表于 2020-2-8 00:17
异步I/O模型有很多种,并不是都必须用完成端口,也并不是客户端多了就要为每个客户端创建一个线程

我已经搞定了,就是怕以后懒得改罢了。
现在 传发服务端 和 传发客户端 我都用了完成端口和线程池,而且完美,谢谢SYC大哥指点。
哈哈。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-5-27 17:01

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表