2011-03-06 78 views
6

我想知道哪些WCF或.NET套接字在遊戲開發場景中效率更高,更推薦。WCF VS.套接字

下面是遊戲的不同部分:

-a客戶端/服務器通信到互聯網上播放

-peer同行本地網絡上。

我想知道你會在這些部位使用的技術(WCF兩個,插座兩個,WCF在一個插座上的其他...),爲什麼,如果可能的話。

涉及的遊戲不需要很高的通信頻率(每秒3-4個就足夠了)。

+0

你打算怎麼做的客戶端/客戶端本地網絡上?這沒有意義。 – Chev 2011-03-06 07:59:29

+2

他意味着同儕2同儕;它是有道理的 – madd0 2011-03-06 08:03:55

+0

不,對等是有道理的。不是客戶端到客戶端。 – Chev 2011-03-06 08:05:02

回答

6

WCF的目的是爲了節省開發人員爲不同的傳輸協議編寫代碼,並且它具有大量的功能,所以這就是爲什麼它比Sockets慢。 Plus WCF適用於面向服務的應用程序。我不認爲遊戲屬於這個類別。

但是,正如你所提到的每秒只有3-4個請求,WCF可能是一個更好的選擇,因爲它非常靈活,將節省大量的開發時間。

幾點:

的綁定與淨*啓動是指.NET應用程序之間使用。 (客戶端和服務器WCF)
如果其中任何一個不是WCF:您只能使用不以網絡前綴開頭的綁定。 BasicHttpBinding,WSHttpBinding等這些比net *綁定慢得多,因爲很多開銷都在那裏。

你可以繼續NetPeerTcpBinding並玩它一段時間。它也支持雙工通信。

下面是P2P一些有用的鏈接:

Peer-to-Peer Programming with WCF and .NET Framework 3.5
http://blogs.interknowlogy.com/2009/08/05/building-a-really-simple-wcf-p2p-application

10

如果你想最大限度地提高性能的插座是要走的路,WCF既有數據和處理開銷。但是......如果性能對你至關重要,你還應該考慮用匯編代替c#。

WCF將每秒處理3-4次請求,而不會眨眼。

我將開始與WCF,它會爲你節省大量的開發時間,沒有必要推出自己的解析器等,您可以專注於其他地區的遊戲來代替。如果它真的讓我們的WCF對於你的遊戲來說太慢了,那麼你可以將WCF扔出去,然後轉向套接字。

1

如果您不需要實時性能(您正在使用C#,所以我想是這樣的話),那麼我會建議WCF。

WCF會給你一個更容易OOP風格的工具來編寫你的服務器 - 客戶端協議。
WCF的優勢在於,從長遠來看,最終編寫的協議和代碼更易於維護和遵循。

如果您想添加任何東西,添加和更改協議的功能將會更容易。

WCF是高度可定製的,所以你更好地瞭解不同的發送數據的方法提供,並重載它們的方式。

您可以使用不同的綁定類型來優化數據傳輸:

WCF Binding In Depth

+0

C#可以用來編寫實時應用程序(我想它也取決於你實時的意思)。 – 2012-06-12 01:16:45

2

兩種技術可以管理每秒您mentionning請求的數量,但是編程模型是完全不同的。套接字的級別非常低,需要在其上構建自己的通信協議。但是,開銷可能很小。 WCF建模在RPC(遠程過程調用)之後,並在傳輸上提供抽象。它允許您使用具有不同技術(如Web服務或消息傳遞)的相同API。然而,提供的抽象有其自身的問題,如一定的複雜性或陡峭的學習曲線...

在你的情況,你也可以看看短信技術,提供了一個很好的抽象,如MSMQZeroMQActiveMQ並且簡化了開發過程。