複雜資料(Protobuf)
StackExchange.Redis 還支援在 pub / sub 通道上傳送位元組,這裡我們使用 protobuf-net 在傳送之前將訊息序列化為位元組陣列:
// definition of a message (marked up with Protobuf attributes)
[ProtoContract]
public class ChatMessage
{
[ProtoMember(1)]
public Guid Id { get; set; }
[ProtoMember(2)]
public string User { get; set; }
[ProtoMember(3)]
public string Text { get; set; }
}
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
var message = new ChatMessage
{
Id = Guid.NewGuid(),
User = "User 1234",
Text = "Hello World!"
};
using (var memoryStream = new MemoryStream())
{
// serialize a ChatMessage using protobuf-net
Serializer.Serialize(memoryStream, message);
// publish the message to the 'chat' channel
subscriber.Publish("chat", memoryStream.ToArray());
}
訂閱者再次需要在收到訊息時反序列化訊息:
// grab an instance of an ISubscriber
var subscriber = connection.GetSubscriber();
// subscribe to messages over the 'chat' channel
subscriber.Subscribe("chat", (channel, bytes) => {
using (var memoryStream = new MemoryStream(bytes))
{
var message = Serializer.Deserialize<ChatMessage>(memoryStream);
// do something with the message
Console.WriteLine($"{message.User} said {message.Text}");
}
});