【发布时间】:2012-02-27 01:04:23
【问题描述】:
有人告诉我,序列化不是通过套接字发送东西的最佳方式,但他们说他们曾经在一本书中读过这一点,并且不确定更好的方式,因为他们以前没有真正做过网络。序列化是最好的方法还是有更好的方法。如果这有很大的不同,这也适用于游戏。我通过搜索有关发送对象的问题看到的似乎大多数人都使用序列化,但我只是检查一下人们在做什么
【问题讨论】:
标签: c# sockets serialization tcp network-programming
有人告诉我,序列化不是通过套接字发送东西的最佳方式,但他们说他们曾经在一本书中读过这一点,并且不确定更好的方式,因为他们以前没有真正做过网络。序列化是最好的方法还是有更好的方法。如果这有很大的不同,这也适用于游戏。我通过搜索有关发送对象的问题看到的似乎大多数人都使用序列化,但我只是检查一下人们在做什么
【问题讨论】:
标签: c# sockets serialization tcp network-programming
序列化基本上意味着转换为适合某种存储类型的状态。通过网络发送的数据必须从内存或 HD 中取出,并以某种格式进行发送。全部序列化。
人们可能会说,序列化为 XML 或 JSON,这只是一种非常特殊的序列化 TYPE。那么是的,你可以根据自己的需要有更好或更差的。
【讨论】:
在 .Net 中,序列化由框架处理,因此对接口进行编程以处理对象非常容易。
如果您需要保持主机 A 和主机 B 之间的复杂对象相同,那么序列化很有用。否则,如果您只需要主机 B 接收该对象的一两个属性并且仍想序列化它,则需要将其转换为更简单的对象,并且可能创建一个新类,这不是一个好处.
另一方面,不必编写自己的套接字到套接字函数可能更安全,因为框架序列化方法和类不会更改您的对象。在我看来,如果您需要节省一些带宽,使用您自己的套接字到套接字方法是一种方法。如果您选择安全性,则序列化是一种方式。
【讨论】:
我遇到了您的问题,并且为了对不同主题进行自我教育,我决定进行一些阅读/研究。我相信您可能已经遇到过这些事情,但是您是否阅读过有关 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 似乎对您来说会更容易,因为它已经有了一个可以利用的基础,尽管您自己编写套接字可能会更快。
对不起,如果我漫无目的,但我希望对你有帮助:)
【讨论】: