Time of Update: 2018-12-07
網遊資料包發送的特點是:每次發送資料的資料量很小,但是頻率非常高。每次發送資料所佔頻寬越小,給伺服器造成的壓力也就越小。 一般用於節約網路頻寬的設計策略有:(1)只發送一次待用資料
Time of Update: 2018-12-07
多播(Multicasting)將資料發送到網路組的各個地址,而不是單個地址。在多播技術中,伺服器不是每次給一個地址單獨地發送一個訊息,而是告訴網路中的路由器,這是一個多播訊息,路由器會把這個訊息向多個目的地址轉寄,可以一次給多個地址發送訊息。這樣一次多播就可以將資料發送到所有需要得到資料的用戶端。實際上,多播技術把伺服器分發資料的任務轉交給了網路中的路由器等路由裝置。因此,多播降低遊戲伺服器的工作量,從而減少延遲,響應更多應答。
Time of Update: 2018-12-07
遊戲空間剖分是針對大型多人遊戲的一種最佳化策略。多個玩家同時線上,用戶端與伺服器必須頻繁進行資料互動,以保持遊戲的同步。如果玩家達到上千個,遊戲情境巨大,許多玩家在情境中可能相隔遙遠,彼此不能相互看到,也不存在任何溝通。在這種情況下,給每個玩家廣播情境的更新訊息就會消耗巨大的網路頻寬。如果將情境進行預先剖分,並在遊戲進行過程中即時更新玩家所在的子空間,伺服器根據玩家所在的空間索引號,然後只對相同空間中的玩家進行資料更新的廣播。這樣就可以節省大量的頻寬,大大減少網路的總體負荷量。
Time of Update: 2018-12-07
摘要:一直以來都覺得printf似乎是c語言庫中功能最強大的函數之一,不僅因為它能格式化輸出,更在於它的參數個數沒有限制,要幾個就給幾個,來者不拒。printf這種對參數個數和參數類型的強大適應性,讓人產生了對它進行探索的濃厚興趣。 關鍵字:printf, 可變參數 1. 使用情形 int a =10;double b = 20.0;char *str = "Hello world";printf("begin print\n");printf("a=%d, b=%.3f, str=%s\n"
Time of Update: 2018-12-07
1、一般來說,一個連接埠釋放後會等待兩分鐘之後才能再被使用,SO_REUSEADDR是讓連接埠釋放後立即就可以被再次使用。 SO_REUSEADDR用於對TCP通訊端處於TIME_WAIT狀態下的socket,才可以重複綁定使用。server程式總是應該在調用bind()之前設定SO_REUSEADDR通訊端選項。TCP,先調用close()的一方會進入TIME_WAIT狀態2、SO_REUSEADDR和SO_REUSEPORTSO_REUSEADDR提供如下四個功能:
Time of Update: 2018-12-07
1、給string賦char*型值,通過以下方式:建構函式string ( const char * s, size_t n );string ( const char * s ); //要求s指向的C風格的字串必須以'\0'結尾。或用assign:string& assign ( const char* s, size_t n );string& assign ( const char* s ); //同樣,以'\0'結尾或用:operator=string&
Time of Update: 2018-12-07
IPC通訊1、pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的進程間使用。進程的親緣關係通常是指父子進程關係。管道的緩衝區是有限的(管道存在於記憶體中,在管道建立時,為緩衝區分配一個頁面大小);管道所傳送的是無格式位元組流,要求管道的讀出方和寫入方必須事先約定好資料的格式。2、具名管道(fifo):具名管道也是半雙工的通訊方式,但是它允許無親緣關係進程間的通訊。嚴格遵循先進先出(first in first out),對管道及FIFO的讀總是從開始處返回資料,
Time of Update: 2018-12-07
c_str()返回的指標保證指向一個size()+1長的空間,而且最後一個字元肯定'\0'。而data返回的指標則保證指向一個size()長度的空間,有沒有null-terminate不保證,可能有,可能沒有,看庫的實現了。c_str()返回的是C風格的字串的首地址,而data()返回的是字元數組的首地址。 程式中,只在需要時才使用c_str()或者data()得到字串,每調用一次,下次再使用就會失效。【3】1、const char* c_str ( ) const;Generates
Time of Update: 2018-12-07
epoll是做為一個虛擬檔案系統來實現的,這樣做至少有以下兩個好處:1、可以在核心裡維護一些資訊,這些資訊在多次epoll_wait間是保持的,比如所有受監控的檔案描述符。2、epoll本身也可以被poll/epoll; 【1】epoll的實現中,所等待的裝置就緒後,便調用call_back函數,把該裝置加入到就緒隊列中,避免了像poll那樣裝置就緒後再次輪詢所有裝置找就緒者,由O(n)降到O(1)。 傳統的poll函數相當於每次調用都重起爐灶,從使用者空間完整讀入ufds,
Time of Update: 2018-12-07
scp是 secure copy的縮寫, scp是linux系統下基於ssh登陸進行安全的遠程檔案拷貝命令。linux的scp命令可以在linux伺服器之間複製檔案和目錄。1、格式scp [-124rv][-P port] [[user@]host1:]file1 [...] [[user@]host2:]file21,2,3表示使用的ssh協議類型,r為遞迴複製整個目錄,v列出詳細1、複製檔案scp local_file
Time of Update: 2018-12-07
方法一:View Code #include <time.h>#include <stdio.h>void main( void ){time_t ltime;time( <ime );printf( "The time is %s\n", ctime(<ime ) );}方法二:struct timeval start;struct timeval end;float time_use =
Time of Update: 2018-12-07
1、ctemplate進階【轉自1】 Modifier(修改器),普通變數的類型(html,js或者其他),會進行校正和編碼處理,比如html類型會將&轉換成&。類型有html,pre,url
Time of Update: 2018-12-07
1、函數#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>int inet_aton(const char *cp, struct in_addr *inp);in_addr_t inet_addr(const char *cp);in_addr_t inet_network(const char *cp);char *inet_ntoa(struct in_addr in)
Time of Update: 2018-12-07
1)安裝vim-enhanced包rpm -qa | grep vim (一般都有安裝包,此步可省)2)修改secureCRT的屬性:Options->SessionOptions ->Emulation,然後把Terminal類型改成xterm,並點中ANSI Color複選框。3)按Esc->:進入命令模式輸入syntax on也沒有效果;這是因為vi沒有識別當前編譯的檔案類型 在命令模式下輸入:set filetype=c4)在/etc/profile中加入
Time of Update: 2018-12-07
1、準備編譯環境gcc;2、下載samba原始碼:http://www.samba.org/samba/ftp/samba-latest.tar.gz3、解壓源碼tar -tzxf samba-latest.tar.gzcd samba-3.5.64、配置1).尋找configure檔案find . -name configurecd source32).配置?1./configure --prefix=/usr/local/smaba5、編譯?12makemake
Time of Update: 2018-12-07
Q1 What happens if you add the same fd to an epoll_set twice? A1 You will probably get EEXIST. However, it is possible that two threads may add the same fd twice. This is a harmless condition. (同一個fd可以設定兩次) Q2 Can two epoll sets
Time of Update: 2018-12-07
1、linux下的web開發,動態網頁面產生很費周折,通常利用cgi接受請求,然後返回頁面給請求端。代碼邏輯和顯示邏輯寫在一起,是一件很痛苦的事情。C++裡的google ctemplate,便是解決這個問題。【1】ctemplate解決的主要問題是將文字表達和邏輯分離開來:文字模板解決如何用合適的文字和形式來表示問題,而邏輯問題則由文字模板的調用者在原始碼中完成。ctemplate大體上分為兩個部分,一部分是模板,另一部分是資料字典。模板定義了介面展現的形式(V),資料字典就是填充模板的資料(
Time of Update: 2018-12-07
遊戲引擎簡單的說就是獨立於外部資源,具有一定完整功能的底層函數集。 網路遊戲引擎主要由圖形引擎、網路引擎、物理引擎、人工智慧引擎、聲效引擎等組成。以下為幾種較流行的圖形與網路引擎1、圖形引擎(1)OGRE圖形引擎:一款開源的圖形渲染引擎,只有圖形部分。(2)RenderWare圖形引擎:國際著名的商業遊戲引擎。功能全面,全部用C寫成。 該引擎較成功,涉及了遊戲開發各個方面(除了網路),圖形模組最大,為了適應跨平台特性,採用了組件化的外掛程式式結構。 2、網路引擎
Time of Update: 2018-12-07
1、XSI system V的訊號量是訊號量集,可以包括多個號誌(有個數組),每個操作可以同時操作多個號誌posix是單個號誌,POSIX有名號誌支援處理序間通訊,無名號誌放在共用記憶體中時可以用於處理序間通訊。2、POSIX訊號量在有些平台並沒有被實現,比如:SUSE8,而SYSTEM V大多數LINUX/UNIX都已經實現。兩者都可以用於進程和線程間通訊。3、POSIX有兩種類型的訊號量,有名訊號量和無名訊號量。有名訊號量像system v訊號量一樣由一個名字標識。4、POSIX通過sem_
Time of Update: 2018-12-07
網路遊戲中對延遲要求比較高的兩類遊戲是:第一人稱射擊(FPS)和即時戰略(RTS),在RTS類遊戲中,延遲低於500ms是可以忍受的,在FPS類遊戲中可以忍受的延遲在100ms到150ms之間。通常在即時網路遊戲中會採用相應的演算法來避免網路延遲對遊戲可玩性的衝擊。1、即時網路遊戲中存在的主要問題 在即時網路遊戲中存在的主要問題有:全域時間問題、頻寬問題、延遲問題,丟包問題、同步問題以及安全問題等。(1)全域時間問題