日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

EPOLL模型

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EPOLL模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在公司里面主要負責一些手機網絡游戲的服務器端的編寫。雖然接觸時間不多,但是感觸良多。特意將我此段時間的體會和大家分享。

? 以前公司的服務器都是使用HTTP連接,但是這樣的話,在手機目前的網絡情況下不但顯得速度較慢,而且不穩定。因此大家一致同意用SOCKET來進行連 接。雖然使用SOCKET之后,對于用戶的費用可能會增加(由于是用了CMNET而非CMWAP),但是,秉著用戶體驗至上的原則,相信大家還是能夠接受 的(希望那些玩家月末收到帳單不后能夠保持克制...)。

? 這次的服務器設計中,最重要的一個突破,是使用了EPOLL模型,雖然對之也是一知半解,但是既然在各大PC網游中已經經過了如此嚴酷的考驗,相信他不會讓我們失望,使用后的結果,確實也是表現相當不錯。在這里,我還是主要大致介紹一下這個模型的結構。

名詞解釋:man epoll之后,得到如下結果:

NAME
?????? epoll - I/O event notification facility

SYNOPSIS
?????? #include

DESCRIPTION
?????? epoll is a variant of poll(2) that can be used either as Edge or Level
?????? Triggered interface and scales well to large numbers of? watched? fds.
?????? Three? system? calls? are provided to set up and control an epoll set:
?????? epoll_create(2), epoll_ctl(2), epoll_wait(2).

?????? An epoll set is connected to a file descriptor created? by? epoll_cre-
?????? ate(2).?? Interest for certain file descriptors is then registered via
?????? epoll_ctl(2).? Finally, the actual wait is started by epoll_wait(2).

其實,一切的解釋都是多余的,按照我目前的了解,EPOLL模型似乎只有一種格式,所以大家只要參考我下面的代碼,就能夠對EPOLL有所了解了,代碼的解釋都已經在注釋中:

while (TRUE)
?{
??int nfds = epoll_wait (m_epoll_fd, m_events, MAX_EVENTS, EPOLL_TIME_OUT);//等待EPOLL時間的發生,相當于監聽,至于相關的端口,需要在初始化EPOLL的時候綁定。
??if (nfds <= 0)
???continue;
??m_bOnTimeChecking = FALSE;
??G_CurTime = time(NULL);
??for (int i=0; i<nfds; i++)
??{
???try
???{
????if (m_events[i].data.fd == m_listen_http_fd)//如果新監測到一個HTTP用戶連接到綁定的HTTP端口,建立新的連接。由于我們新采用了SOCKET連接,所以基本沒用。
????{
?????OnAcceptHttpEpoll ();
????}
????else if (m_events[i].data.fd == m_listen_sock_fd)//如果新監測到一個SOCKET用戶連接到了綁定的SOCKET端口,建立新的連接。
????{
?????OnAcceptSockEpoll ();
????}
????else if (m_events[i].events & EPOLLIN)//如果是已經連接的用戶,并且收到數據,那么進行讀入。
????{
?????OnReadEpoll (i);
????}

????OnWriteEpoll (i);//查看當前的活動連接是否有需要寫出的數據。
???}
???catch (int)
???{
????PRINTF ("CATCH捕獲錯誤\n");
????continue;
???}
??}
??m_bOnTimeChecking = TRUE;
??OnTimer ();//進行一些定時的操作,主要就是刪除一些短線用戶等。
?}

 其實EPOLL的精華,按照我目前的理解,也就是上述的幾段短短的代碼,看來時代真的不同了,以前如何接受大量用戶連接的問題,現在卻被如此輕松的搞定,真是讓人不得不感嘆。

總結

以上是生活随笔為你收集整理的EPOLL模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。