亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
123下一頁
最近訪問板塊 發(fā)新帖
查看: 4292 | 回復(fù): 29
打印 上一主題 下一主題

[C++] socket套接字的處理 [復(fù)制鏈接]

論壇徽章:
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
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2016-03-15 21:06 |只看該作者 |倒序瀏覽
現(xiàn)在開發(fā)一個項目,遇到的問題可以抽象出下面這個簡化問題:
一個服務(wù)S,內(nèi)有300個線程,往客戶端C發(fā)數(shù)據(jù),C端數(shù)量在幾百個以內(nèi),可能有部分線程都會往C發(fā)數(shù)據(jù),這種情況下socket應(yīng)該如何創(chuàng)建和維護(考慮性能損失和安全性)?

目前有兩個不成熟的想法,希望各位指點:
1.多個線程通過鎖搶一個socket
維護三張映射表,map以ip_port為key
    a)vector<mutex>      //某個socket的鎖,通過index確定
    b)map<key, socket>  //ip port對應(yīng)的socket
    c)map<key, index>    //ip port對應(yīng)的鎖的index
每個線程內(nèi),數(shù)據(jù)到來時,先查看ip和port為key是否有對應(yīng)的socket和mutex,沒有則創(chuàng)建,有則上對應(yīng)的鎖后發(fā)送數(shù)據(jù),之后解鎖。

2.每個線程內(nèi)都維護一組key<---->socket的映射,不需要鎖,數(shù)據(jù)到來后查看這個ip和port的socket是否已經(jīng)存在,沒有則創(chuàng)建,有則直接發(fā)送


網(wǎng)絡(luò)開發(fā)經(jīng)驗不多,考慮到頻繁關(guān)閉套接字很浪費性能,同時多線程搶鎖也會損失一定資源,煩請各位指點

論壇徽章:
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
2 [報告]
發(fā)表于 2016-03-15 22:23 |只看該作者
為什么要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
3 [報告]
發(fā)表于 2016-03-16 10:09 |只看該作者
回復(fù) 2# hellioncu


    服務(wù)器后臺開發(fā),算是一個需求吧。

    就這個問題可以拋開線程數(shù),就當一個多線程發(fā)送

論壇徽章:
1
射手座
日期:2014-08-04 16:49:43
4 [報告]
發(fā)表于 2016-03-16 10:46 |只看該作者


如果數(shù)據(jù)量不大 且延遲不高的話  一個EPOLL 或者Select 足矣搞定300個客戶端。

如果數(shù)據(jù)量大、需要長連接 多交互,那就用線程池來維護,當服務(wù)器接收到新的客戶端連接就分配一個可用線程去工作,
當線程池不夠時 根據(jù)需要等待其他線程空余或者再次申請一段線程池。


樓主明白否?

論壇徽章:
3
2015年辭舊歲徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:032015年亞洲杯之中國
日期:2015-04-22 15:52:45
5 [報告]
發(fā)表于 2016-03-16 10:53 |只看該作者
我從未見過如此二之模型!

總有些菜鳥想把簡單的socket寫得復(fù)雜得跟阿爾法狗一樣, 天天出各種問題, 才高大上一樣!
勞資天天受這種人的爛庫的荼毒~~~
直接說最高效可靠的模型吧.

單進程單線程, 要發(fā)就發(fā), 沒有就連接, 發(fā)送區(qū)滿就緩存.
穩(wěn)如狗~


(別誤會, 我不是噴題主, 我是噴我的同事們)

論壇徽章:
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
6 [報告]
發(fā)表于 2016-03-16 11:22 |只看該作者
回復(fù) 4# hanzhenlll


    你說的這個開發(fā)框架我了解,但我這個不適用。
    我這邊server端是推的形式,不是拉。線程接到其他模塊的數(shù)據(jù)后(里面有ip、port)字段,然后往Client發(fā)送數(shù)據(jù),我關(guān)注的是這時的socket如何維護的問題,畢竟頻繁創(chuàng)建socket會比較費資源。
    發(fā)送數(shù)據(jù)的頻率不一定,看訂閱的情況,有的很短、有的1小時、有的1天。

    有什么建議?多謝指教!

論壇徽章:
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
7 [報告]
發(fā)表于 2016-03-16 11:25 |只看該作者
回復(fù) 5# hanxin83


    即使噴,我也忍了

    單線程確實有他的優(yōu)勢,但是限于我的環(huán)境和需求,也只能是目前的框架了,不知在目前這個條件下,對于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
8 [報告]
發(fā)表于 2016-03-16 14:55 |只看該作者
很多問題你都沒說清楚:
是TCP么?客戶端主動連接服務(wù)器并保持長連接么?

BTW:
300個線程,在絕大多數(shù)情況下是不合理的設(shè)計。

論壇徽章:
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
9 [報告]
發(fā)表于 2016-03-16 16:08 |只看該作者
回復(fù) 8# hellioncu

  怪我了。

    1、底層封裝了TCP
    2、客戶端被動接收(會先到另一個模塊注冊),傳到Server端的數(shù)據(jù)中有這個客戶端的ip和port,然后send。
    框架上可能有點別扭,但業(yè)務(wù)邏輯是這樣的,先假定在這個現(xiàn)有條件下吧,如何維護?  多謝!

BTW:
    如果方便的話,簡單說一下300線程不合理的原因,多謝哈!

論壇徽章:
12
2015年辭舊歲徽章
日期:2015-03-03 16:54:1515-16賽季CBA聯(lián)賽之同曦
日期: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聯(lián)賽之福建
日期:2016-01-14 12:49:22程序設(shè)計版塊每日發(fā)帖之星
日期:2015-12-13 06:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-08 22:20:00程序設(shè)計版塊每日發(fā)帖之星
日期:2015-06-08 22:20:002015年亞洲杯之科威特
日期:2015-03-24 14:21:272015年迎新春徽章
日期:2015-03-04 09:57:092016科比退役紀念章
日期:2018-04-10 16:20:18
10 [報告]
發(fā)表于 2016-03-16 16:23 |只看該作者
線程數(shù)量跟cpu核數(shù)量差不多才合理一些,300個,貌似沒有必要。目的主要還是多連接吧?epoll應(yīng)該ok。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP