在c#.net中通过套接字序列化和反序列化多个对象

本文关键字:反序列化 对象 序列化 套接字 net | 更新日期: 2023-09-27 18:06:53

我正在为我正在编写的项目进入c# .net的套接字编程。

该项目将是一个多客户端系统,其中客户端服务监视系统资源并向中央服务器报告。

我正在研究Remoting, WCF等,以确定哪一个最适合我。由于一些需求,我决定使用套接字编程:

  • socket比其他socket更快,开销很小
  • 我可以支持服务器上每个资源的更多连接
  • Sockets 可以,虽然修改,允许我与基于UNIX的系统也交互。
  • 我可以在代码中对链接自己实现加密,而不必依赖SSL证书。

我可能在这里想错了吗?如果我是,请告诉我。有人建议WCF,因为它"很好用",可以做我想做的一切,但我认为它的速度要慢得多,而且有开销。

我的主要问题是,虽然客户端机器不会保持连接打开,但可能有数千或数万个客户端机器,我必须假设机器将被连接锤击。考虑到连接之间的最小时间,每个客户端,可能小到1分钟。

现在到我手头的问题:如何通过链接发送多个对象,更重要的是如何确定它们在另一边是什么?

我认为这在一个连接上是可能的,因为我已经读了很多这样说的文章,尽管它们描述的方法不同,示例也不同。

问题是我找不到任何实际做到这一点的例子。没有例子显示如何发送多个对象,然后如何确定它们在另一边是什么。

谁能在这里帮助我或指出我的例子。一旦我有了一个工作的基础,我就能把事情弄清楚了。

在c#.net中通过套接字序列化和反序列化多个对象

这感觉像是一个过早优化和重新发明轮子的经典案例。我可能弄错了,因为我不知道你的性能要求、开发资源和时间框架是什么。但我怀疑在你之前,那些非常聪明的人也有同样的问题。他们提出了各种各样的解决方案,包括HTTP (SOAP、REST)和XMPP(如果需要有状态协议的话)。即使在应用程序级别,也可以做很多事情来提高性能(最小化通过网络发送的数据量,缓存等)。没有直接使用套接字带来的复杂性开销。你可能知道所有这些,但我强烈建议你再评估一下你的决定。

对于常见的序列化格式,如XML和JSON,您可能还需要查看协议缓冲区:

protocol buffers是所使用的二进制序列化格式的名称他们的大部分数据通信。它被设计为:

  • 尺寸小- 高效数据存储(远小于xml)
  • 便宜处理-在客户端和服务器
  • 平台无关- 可移植在不同的编程体系结构之间
  • 可扩展-向旧消息添加新数据

您可能在尝试重新发明轮子。但是,既然您已经下定决心要使用套接字(有过这样的经历,学到了很多),那么请阅读有关序列化的链接:

    如何在c#中处理XML
  • XML序列化和继承类型
  • 如何将c#匿名类型序列化为JSON字符串?
  • 在c#中解析JSON