2014-08-27 156 views
-1

我是套接字新手,我有一些關於客戶端< - >服務器通信的理論問題。套接字和數據傳輸格式

問題是關於消息類型和格式。

  1. 如果我將用一個字符串作爲字節[]與定界符的消息,對於所有客戶端 - 服務器操作,是它的高負荷項目的一個很好的做法? 例如: 「CMSG_AUTH:登錄名:密碼」

  2. 我聽說有人使用opcodes作爲服務器返回命令。我應該串聯使用字符串和操作碼嗎?如何?對於內部服務器體系結構,哪些設計模式會很好學習? (我知道,這是一個愚蠢的問題,但我真的很感興趣的服務器開發,這是我的夢想編寫良好的,可擴展的服務器應用程序)。我不想使用WCF,我想從頭開始,只是爲了理解它是如何工作的。

+1

你在想TCP或UDP嗎?一個常見的初學者錯誤是沒有意識到,TCP套接字只是提供了「字節流」的抽象 - 如果你想要*消息*,這取決於你在TCP抽象之上實現它們。 – 2014-08-27 12:40:03

+0

我的意思是TCP :) – Jesse 2014-08-27 12:52:13

+1

是的,好吧。所以如果你想要消息,你必須實現它們。對「Receive」的調用可能會收到消息的*部分*。或者一個消息的結尾,另一個完整的消息和第三個消息的開始。或者你可以想到的任何其他組合。 – 2014-08-27 12:57:37

回答

0

使用已建立的格式序列化來自客戶端和服務器的消息。對方可以使用相同的格式進行反序列化。

格式示例是JSON,xml(使用字符串)或protobuf(二進制)。

定義要客戶端和服務器之間傳輸的信息類:

class LoginDto 
    { 
     string UserName {get;set;} 
     string Secret{get;set;} 
    } 

如果你堅持既定的格式,它是很容易的序列化這樣一個類的實例在被傳輸線。

尋找DataContractSerializer,JSON.NetProtobuf-net來實現XML,JSON和protobuf序列化器。