【问题标题】:Is Serialization the best for sending data over a socket?序列化是通过套接字发送数据的最佳选择吗?
【发布时间】:2012-02-27 01:04:23
【问题描述】:

有人告诉我,序列化不是通过套接字发送东西的最佳方式,但他们说他们曾经在一本书中读过这一点,并且不确定更好的方式,因为他们以前没有真正做过网络。序列化是最好的方法还是有更好的方法。如果这有很大的不同,这也适用于游戏。我通过搜索有关发送对象的问题看到的似乎大多数人都使用序列化,但我只是检查一下人们在做什么

【问题讨论】:

    标签: c# sockets serialization tcp network-programming


    【解决方案1】:

    序列化基本上意味着转换为适合某种存储类型的状态。通过网络发送的数据必须从内存或 HD 中取出,并以某种格式进行发送。全部序列化。

    人们可能会说,序列化为 XML 或 JSON,这只是一种非常特殊的序列化 TYPE。那么是的,你可以根据自己的需要有更好或更差的。

    【讨论】:

    • 我通常使用的是 BinaryFormatter,它是通过套接字发送结构的最佳选择?寻找速度。
    • 是的,如果您的唯一目标是传输速度。你正在做的二进制将是最好的。
    • @Jordan Binary 是最好、最快的方法,但是 BinaryFormatter(.NET 特定)使用反射,因此比使用 BinaryWriter 编写自己的序列化逻辑开销更大。
    • @IDWMaster 我完全同意你的看法。然而,由于套接字传输之外的性能似乎甚至不是问题,我认为这并不是一个真正的重点,但我会亲自编写自己的。对我来说,性能始终是所有元素的问题。也许对于 OP 来说,使用 BinaryFormatter 更容易。
    • 你有一个链接可以让我开始写我自己的吗?
    【解决方案2】:

    在 .Net 中,序列化由框架处理,因此对接口进行编程以处理对象非常容易。

    如果您需要保持主机 A 和主机 B 之间的复杂对象相同,那么序列化很有用。否则,如果您只需要主机 B 接收该对象的一两个属性并且仍想序列化它,则需要将其转换为更简单的对象,并且可能创建一个新类,这不是一个好处.

    另一方面,不必编写自己的套接字到套接字函数可能更安全,因为框架序列化方法和类不会更改您的对象。在我看来,如果您需要节省一些带宽,使用您自己的套接字到套接字方法是一种方法。如果您选择安全性,则序列化是一种方式。

    【讨论】:

      【解决方案3】:

      我遇到了您的问题,并且为了对不同主题进行自我教育,我决定进行一些阅读/研究。我相信您可能已经遇到过这些事情,但是您是否阅读过有关 Windows Communication Foundation (WCF) 的信息?这是一篇可能与http://blogs.msdn.com/b/carlosfigueira/archive/2008/01/13/writing-custom-requests-to-simple-wcf-services.aspx 相关的文章。

      同样在这篇文章Problem with sockets and OutOfMemory error 中,人们谈论了他们是如何进行基于套接字的通信但之前没有考虑过 WCF 的,但这似乎是一种祝福。这篇文章C# Sending multiple objects over same Socket 中的一些人说过,如果开销在这种情况下非常重要,那么它可能是一个问题,但我认为它更多地取决于你想要完成的事情(尽管你说是用来玩游戏的。)

      再说一次,我不会声称自己是专家,我只是对尽可能多地学习很感兴趣,而且我对与您的帖子相关的主题的快速阅读都将我带到了 WCF。如果您是新手并且对这个主题感到好奇,那么依赖 WCF 似乎对您来说会更容易,因为它已经有了一个可以利用的基础,尽管您自己编写套接字可能会更快。

      对不起,如果我漫无目的,但我希望对你有帮助:)

      【讨论】:

      • 感谢您的输入,我确实了解 WCF,但我只是想知道,因为我和一个朋友正在谈论 c# 和套接字以及我的一个程序如何发送内容。当他看到我使用序列化时,他说他读过一次这不是最好的方法,但我从未听说过另一种方法,所以这就是我问的原因
      • 您好,谢谢您的回复。抱歉,如果我的回答不完全符合您的要求。我当然不是这个问题的专家,但也想了解更多,所以我一直在做更多的阅读。我遇到了更多链接,虽然我不能说这是最佳实践,但可能会有所帮助:stackoverflow.com/questions/284885/… 和(对于套接字与 WCF)stackoverflow.com/questions/1040278/sockets-vs-wcf
      • 非常感谢您提供的链接,如果您想讨论更多关于 c# 的内容,以便我们都可以了解更多信息,我有一个 Skype,所以我们没有永久大小的 cmets,请告诉我跨度>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      • 2011-08-05
      • 2014-12-17
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多