91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 15KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發(fā)布日期: 2021-05-20
  • 語言: C/C++
  • 標簽: IOCP??完成端口??源碼??

資源簡介

最近有項目要做一個高性能網(wǎng)絡服務器,決定下功夫搞定完成端口(IOCP),最終花了一個星期終于把它弄清楚了,并用C++寫了一個版本,效率很不錯。 但,從項目的總體需求來考慮,最終決定上.net平臺,因此又花了一天一夜弄出了一個C#版,在這與大家分享。 一些心得體會: 1、在C#中,不用去面對完成端口的操作系統(tǒng)內核對象,Microsoft已經為我們提供了SocketAsyncEventArgs類,它封裝了IOCP的使用。請參考:http://msdn.microsoft.com/zh-cn/library/system.net.sockets.socketasynceventargs.aspx?cs-save-lang=1&cs-lang=cpp#code-snippet-1。 2、我的SocketAsyncEventArgsPool類使用List對象來存儲對客戶端來通信的SocketAsyncEventArgs對象,它相當于直接使用內核對象時的IoContext。我這樣設計比用堆棧來實現(xiàn)的好處理是,我可以在SocketAsyncEventArgsPool池中找到任何一個與服務器連接的客戶,主動向它發(fā)信息。而用堆棧來實現(xiàn)的話,要主動給客戶發(fā)信息,則還要設計一個結構來存儲已連接上服務器的客戶。 3、對每一個客戶端不管還發(fā)送還是接收,我使用同一個SocketAsyncEventArgs對象,對每一個客戶端來說,通信是同步進行的,也就是說服務器高度保證同一個客戶連接上要么在投遞發(fā)送請求,并等待;或者是在投遞接收請求,等待中。本例只做echo服務器,還未考慮由服務器主動向客戶發(fā)送信息。 4、SocketAsyncEventArgs的UserToken被直接設定為被接受的客戶端Socket。 5、沒有使用BufferManager 類,因為我在初始化時給每一個SocketAsyncEventArgsPool中的對象分配一個緩沖區(qū),發(fā)送時使用Arrary.Copy來進行字符拷貝,不去改變緩沖區(qū)的位置,只改變使用的長度,因此在下次投遞接收請求時恢復緩沖區(qū)長度就可以了!如果要主動給客戶發(fā)信息的話,可以new一個SocketAsyncEventArgs對象,或者在初始化中建立幾個來專門用于主動發(fā)送信息,因為這種需求一般是進行信息群發(fā),建立一個對象可以用于很多次信息發(fā)送,總體來看,這種花銷不大,還減去了字符拷貝和消耗。 6、測試結果:(在我的筆記本上時行的,我的本本是T420 I7 8G內存) 100客戶 100,000(十萬次)不間斷的發(fā)送接收數(shù)據(jù)(發(fā)送和接收之間沒有Sleep,就一個一循環(huán),不斷的發(fā)送與接收) 耗時3004.6325 秒完成 總共 10,000,000 一千萬次訪問 平均每分完成 199,691.6 次發(fā)送與接收 平均每秒完成 3,328.2 次發(fā)送與接收 整個運行過程中,內存消耗在開始兩三分種后就保持穩(wěn)定不再增漲。 看了一下對每個客戶端的延遲最多不超過2秒。

資源截圖

代碼片段和文件信息

using?System;
using?System.Collections.Generic;
using?System.ComponentModel;
using?System.Data;
using?System.Drawing;
using?System.Text;
using?System.Windows.Forms;

namespace?IocpServer
{
????public?partial?class?MainForm?:?Form
????{
????????public?delegate?void?SetListBoxCallBack(string?str);
????????public?SetListBoxCallBack?setlistboxcallback;
????????public?void?SetListBox(string?str)
????????{
????????????infoList.Items.Insert(0?str);
????????????infoList.SelectedIndex?=?0;
????????}

????????private?IoServer?iocp?=?new?IoServer(10?1024);

????????public?MainForm()
????????{
????????????InitializeComponent();
????????????setlistboxcallback?=?new?SetListBoxCallBack(SetListBox);
????????}

????????private?void?startBtn_Click(object?sender?EventArgs?e)
????????{
????????????iocp.Start(9900);
????????????iocp.mainForm?=?this;
????????????startBtn.Enabled?=?false;
????????????stopBtn.Enabled?=?true;
????????????SetListBox(“監(jiān)聽開啟...“);
????????}

????????private?void?stopBtn_Click(object?sender?EventArgs?e)
????????{
????????????iocp.Stop();
????????????startBtn.Enabled?=?true;
????????????stopBtn.Enabled?=?false;
????????????SetListBox(“監(jiān)聽停止...“);
????????}

????????private?void?exitBtn_Click(object?sender?EventArgs?e)
????????{
????????????if?(stopBtn.Enabled)
????????????????iocp.Stop();
????????????this.Close();
????????}

????????private?void?clearBtn_Click(object?sender?EventArgs?e)
????????{
????????????infoList.Items.Clear();
????????}

????}
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????1561??2012-11-22?22:50??IocpServer\IocpServer\Form1.cs

?????文件???????6990??2012-11-22?22:50??IocpServer\IocpServer\Form1.Designer.cs

?????文件???????5817??2012-11-22?09:26??IocpServer\IocpServer\Form1.resx

?????文件???????3477??2012-11-23?00:10??IocpServer\IocpServer\IoContextPool.cs

?????文件???????3717??2012-11-22?19:20??IocpServer\IocpServer\IocpServer.csproj

?????文件??????13943??2012-11-24?11:26??IocpServer\IocpServer\IoServer.cs

?????文件????????485??2012-11-22?22:50??IocpServer\IocpServer\Program.cs

?????文件???????1450??2012-11-22?09:26??IocpServer\IocpServer\Properties\AssemblyInfo.cs

?????文件???????2848??2012-11-22?09:26??IocpServer\IocpServer\Properties\Resources.Designer.cs

?????文件???????5612??2012-11-22?09:26??IocpServer\IocpServer\Properties\Resources.resx

?????文件???????1095??2012-11-22?09:26??IocpServer\IocpServer\Properties\Settings.Designer.cs

?????文件????????249??2012-11-22?09:26??IocpServer\IocpServer\Properties\Settings.settings

?????目錄??????????0??2012-11-26?00:54??IocpServer\IocpServer\Properties

?????目錄??????????0??2012-11-26?00:54??IocpServer\IocpServer

?????文件????????872??2012-11-22?09:26??IocpServer\IocpServer.sln

?????目錄??????????0??2012-11-26?00:54??IocpServer

-----------?---------??----------?-----??----

????????????????48116????????????????????16


評論

共有 條評論