免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: kaede_1
打印 上一主题 下一主题

[C++] socket套接字的处理 [复制链接]

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
21 [报告]
发表于 2016-03-17 09:58 |只看该作者
kaede_1 发表于 2016-03-17 09:55
恩,这样的话就又回到我1L说的那两种了
是全局加锁维护一份socket映射好还是每个线程内部维护一份好? ...


就一个线程管理这些连接,不需要锁。其它线程给这个线程的发送队列放数据,这个需要锁一下。

论坛徽章:
5
戌狗
日期:2014-06-09 10:29:10酉鸡
日期:2014-12-01 16:05:27处女座
日期:2015-01-07 18:35:262015亚冠之水原三星
日期:2015-06-03 09:26:222015亚冠之布里斯班狮吼
日期:2015-06-15 10:53:54
22 [报告]
发表于 2016-03-17 10:05 |只看该作者
回复 18# cokeboL


    哈哈,你说的跟我目前实现差的不多

    我现在再做一个消息系统,推的形式,数据到来后里面有ip和port信息,直接将数据发给客户端即可(客户端我封装了一个server ),在接收线程组中给数据设置了recvtime,在处理发送线程组中判断超时丢弃。
    socket的维护准备用map,key为ip和port,确保唯一。

    不过我在锁和大量socket间纠结。。。
    就像我楼上回复hellioncu的那样

    不过看你最后一段,貌似是推荐不用锁。。。
    多谢哈

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
23 [报告]
发表于 2016-03-17 10:23 |只看该作者
你不就是往客户端推送数据吗?那就把所有连接放在一个容器里面,然后定时的遍历整个容器逐个post过去一个任务。

怎么可能开300线程呢。

论坛徽章:
5
戌狗
日期:2014-06-09 10:29:10酉鸡
日期:2014-12-01 16:05:27处女座
日期:2015-01-07 18:35:262015亚冠之水原三星
日期:2015-06-03 09:26:222015亚冠之布里斯班狮吼
日期:2015-06-15 10:53:54
24 [报告]
发表于 2016-03-17 10:33 |只看该作者
回复 21# hellioncu


    额。。。
    假如是多个线程发送呢?我这还有个需求是分发文件,如果一个几个G的文件卡在这个发送线程里,后续消息我怕会堆积吧、、、

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
25 [报告]
发表于 2016-03-17 11:22 |只看该作者
kaede_1 发表于 2016-03-17 10:33
回复 21# hellioncu


你发这么大的文件,网络就是瓶颈了,你再多线程也没用

论坛徽章:
12
2015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之同曦
日期:2017-03-17 19:13:162016科比退役纪念章
日期:2016-11-07 08:28:12luobin
日期:2016-06-17 17:46:36wusuopu
日期:2016-06-17 17:43:4515-16赛季CBA联赛之福建
日期:2016-01-14 12:49:22程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:00程序设计版块每日发帖之星
日期:2015-06-08 22:20:002015年亚洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役纪念章
日期:2018-04-10 16:20:18
26 [报告]
发表于 2016-03-17 11:30 |只看该作者
回复 24# kaede_1


    恰好之前做过类似的,也是发送几个G的文件,甚至更大。我们当时的做法是用libevent库,多线程,sendfile发送。效率还不错。不过别用阻塞式,不然性能很低。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
27 [报告]
发表于 2016-03-17 12:51 |只看该作者
如果没有太多逻辑处理(cpu业务型),多线程IO不如单线程IO效率高,因为你的IO量大对于网卡和内核网络驱动来说差不多跑满了,如果多线程内核还要处理竞争问题,还有多线程额外的调度和资源开销,不如单线程性能高

论坛徽章:
0
28 [报告]
发表于 2016-03-18 21:03 |只看该作者
虽然没理解楼主为什么要这么设计,但是感觉楼主没抓住问题的本质:为什么要用ip、port作为key?

你不就是觉得map + ip、port比较低效吗,那就不用ip和port好了,用指针啊,可以指向任何结构体,包含ip、port、socket、等等等等。不用加锁了,也不用find了,告诉线程那个用户对应的struct *,就直接send。

思路清晰一点,就能做到。

论坛徽章:
5
戌狗
日期:2014-06-09 10:29:10酉鸡
日期:2014-12-01 16:05:27处女座
日期:2015-01-07 18:35:262015亚冠之水原三星
日期:2015-06-03 09:26:222015亚冠之布里斯班狮吼
日期:2015-06-15 10:53:54
29 [报告]
发表于 2016-03-21 19:22 |只看该作者
修改思路基本上有了,多谢各位的帮忙,尤其是cokeboL和hellioncu,多谢

论坛徽章:
0
30 [报告]
发表于 2016-03-26 10:52 |只看该作者
回复 5# hanxin83


    我擦,你搞过单片机、驱动? 知道本源的力量? 怎么这么一针见血
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP