2010-07-09 20 views
2

我一直建立自己的序列化器/反序列化器,以便能夠使用BeginReceive/EndReceive與套接字來避免每個連接的套接字使用一個線程。這是一項非常耗時的任務。使用流與套接字的異步方法

我已經開始研究protobuf-net,並且希望將它與異步套接字一起使用,而無需自己編寫序列化/反序列化。我寧願如果我不必每個套接字使用一個線程來包裝阻塞操作。

看着quickstart他們正是這樣做(每個客戶端一個線程)。沒有其他辦法嗎?

我的問題不是關於protobuf-net,而是關於一般的序列化和套接字。但是protobuf-net的例子是最受歡迎的。

回答

1

這只是一個基本的例子。 protobuf-net是系列化層,而不是消息層。如果你有一個特定的方式來處理消息傳遞:去做吧。您只需在流處理期間緩衝整個消息(可能是MemoryStream),然後在數據可用時通過protobuf-net進行處理。

區別在於,不是直接使用*WithLengthPrefix方法,而是可能需要單獨處理有效負載長度,以便代碼在處理之前知道需要緩衝的數據量。

+0

串行器中的串行器/解串器方法是鍵入的,對嗎?我不知道我會收到哪些protobuf消息,因此不能使用它們,有沒有其他的選擇? – jgauffin 2010-07-09 14:04:33

+0

馬克的回答是正確的。然而,緩衝到「變體」長度並不容易。 – 2010-07-09 15:08:24

+0

@jgauffin - 通過'Serializer.NonGeneric'有一個機制,**正是爲此設計的**,它提供了一種即時提供類型的機制。 SO最近有一個關於這個例子的問題。 – 2010-07-09 15:20:20