关于自行车的一些知识

2014年,我们与一位同学安顿下来,创办了一家初创公司。产品的术语,结果和重点在本文中并不重要。重要的是,客户端是适用于Android的移动Java应用程序,而服务器是用C#编写的与数据存储通信的服务。进一步-一个寓言故事,针对灰发长者(来自编程)娱乐,针对无胡子的年轻人-寓教于乐。



为了确保作为服务器端开发人员,我可以控制一切,服务器的第一个版本是使用System.Net.Sockets.Socket类编写的,就像Microsoft文章所述。由于套接字可以在Begin / End方法上工作(原则上,与Microsoft列出的所有其他技术一样,除了WCF),因此编写了一个小的包装程序,该包装程序可以使用基于事件的模型。这是第一步,客户端和服务器运行良好。



由于很快就需要SSL,因此我们不得不升级到OSI模型的更高级别,并使用与SSL绑定的System.Net.Sockets.TcpListener类重写服务器端。这是第二个步骤和两个半步骤,客户端和服务器工作正常,客户端甚至不必重写-数据包拦截表明一切正常,没有任何更改。



后来,我想要一个功能全面的HTTPS,并重新编写服务器-现在使用System.Net.HttpListener类。这是第三个步骤和第三个半步骤,再次一切正常,并且不需要重做客户端。为了公平起见,应该注意的是,除了自定义移动客户端之外,还有一个测试C#客户端和一堆测试-但是它们必须被重写。



第四步是当我们开始全方位扩展系统时,我们自己的包装器成为该项目的瓶颈。然后,我阅读了有关WCF的内容,并在一个晚上(差不多,晚上)重写了整个交互过程。在客户端(以及发送的数据包)中,所有内容都保持不变,但是服务器端代码已从六个严重类减少到几行。



这个故事有两种道德。



  1. (显然)发明自行车是不好的。如果我立即去Google,并且不怕自己使用新技术,那么我可以将服务器开发减少大约三分之一。
  2. (这是主要内容)使用不同工具实现相同机制的任务是最好的学习方法,可让您深入了解该主题。当您几次做某件事时,您会记住它。但是,当您同时使每次使用的工具复杂化(更改)时,其技能将大大提高。



All Articles