简单的服务器和客户端通信

时间:2016-08-03 16:17:35

标签: networking server network-programming client backend

我想为我的桌面创建一个程序,为我的android创建一个应用程序。他们两个都会在不同的设备上做同样的事情。他们会像个人助理一样,所以我想把很多数据放进去(例如联系人,笔记和其他很多东西)。所有这些数据都应保存在服务器上(至少在开始时我将在家中使用我自己的Ubuntu服务器)。

对于Android应用程序,我显然会使用java,服务器上的数据库将是一个MySQL数据库,因为那是我用过的所有数据库。 Windows程序很可能用这些语言编写:Java,C#c C ++,因为这些是我能够很好地使用的语言。

现在来到问题/问题:服务器应该有一个良好的后端,它将与应用程序/程序进行通信,并在数据库中读/写数据,管理用户和所有这些东西。但我不确定如何处理后端编程和网络通信#34;本身。我真的希望有一些相对简单的方法在服务器和客户端之间发送安全消息,但我没有经验。我确实有编程经验,但没有后端和网络编程。

附注:
我想"扩大规模"。起初,这个系统只能由我使用,但可能会向更多人开放甚至出售 此外,我真的很想在服务器上使用(部分)自编程后端,因为我可以很好地将其用于许多其他内容,例如我家中的一些自动化功能,这些功能将被实现。

编辑:我想能够扩大规模。我不需要在开始时为数百人提供支持;)

2 个答案:

答案 0 :(得分:0)

您需要研究Socket编程。它们提供相对容易,安全的网络通信。实质上,您将在服务器上创建某种连接或套接字侦听器。客户端将创建套接字,初始化它们以连接到某个IP地址和端口号,然后连接。一旦服务器收到这些连接,服务器就会为该特定连接创建一个Socket,这两个套接字可以来回通信。

如果您希望服务器能够处理多个客户端,我建议每次服务器收到连接时创建一个新线程,并且该线程将专用于该特定客户端连接。拥有一个多线程服务器,每个客户端都有自己的专用线程,这是高效服务器的良好起点。

以下是Socket客户端和服务器的一些很好的C#示例:https://msdn.microsoft.com/en-us/library/w89fhyex(v=vs.110).aspx

作为旁注,您还可以使用Xamarin在C#中编写Android应用程序。如果您使用C#进行桌面程序和Android应用程序,则可以编写大部分代码并轻松地在两个应用程序之间共享。

我建议您通过创建非常简单的客户端和服务器应用程序来开始学习套接字编程,以便掌握它们在大型项目中的通信方式。一旦掌握了足够好的沟通程序,就可以开始设计更大的项目了。

答案 1 :(得分:0)

  

但我不确定如何处理后端编程和   “网络通信”本身。

传统上,您的案例服务器将是一个公开REST API(JSON)的Web服务器。所有客户端都需要执行http请求并呈现/解析JSON。 REST API映射到数据库调用并公开一些数据模型。如果它是在Java中,它将是Jetty Web服务器,Jackson Json解析器。

  

我真的希望有一些相对简单的方法来发送安全   服务器和客户端之间的消息,

发送HTTP请求可能是与服务通信的最简单方法。保护它是在服务器端启用HTTPS并实现一些用户访问身份验证和操作授权的问题。使用Jetty for Java启用HTTPS将需要几行代码。身份验证通常通过OAuth2技术完成,授权可以基于ACL。您可以超越此范围并启用静态数据加密并使用其他实践。

  

我想“扩大规模”。起初,这个系统只能用于   我,但它可能会向更多人开放甚至出售。   我希望能够扩大规模。我不需要支持   一开始就有数百人

我预计可扩展性可能成为主要挑战。根据您希望扩展的范围,您可能需要转到分布式(大数据)数据库和分布式服务和消息传递层。

  

此外,我真的想要一个(部分)自编程的后端   服务器,因为我可以很好地将它用于很多其他的东西,   就像我家里的一些自动化功能一样,将会实现。

我不确定你的意思是自编程。通常后端封装一些特定于应用程序的业务逻辑。

  • 它可能是您的数据库和http传输层之间的一条逻辑。
  • 在更复杂的情况下,您的逻辑可以放在后端后面的异步服务中,因此服务可以在不阻止客户请求的情况下完成工作。
  • 在大多数(可能)复杂的情况下,你的后端可能会进行机器学习(例如,如果你想要软件堆栈来学习你的家庭习惯,并根据你的期望自动化房子而不实际编码这种自动化)< / LI>
  

但我没有这方面的经验。我有编程   一般的经验,但没有后端和网络编程。

如果你可以编码,编写后端不是很难的问题。有很多资源。但是,您需要时间(或金钱)来学习和做,可能会分散您对应用程序开发的注意力,或者您可能会喜欢它。

内部开发后端的替代方案可能是云端或内部的后端即服务(BaaS)。这个市场有很多产品。 BaaS将允许您完全消除后端的开发(或接近此)。至少它应该做:

  • 使用可配置数据模型的REST API到数据存储,
  • 安全,
  • 可扩展性,
  • 自定义业务逻辑

免责声明:我是webintrinsics.io团队的成员,这是一个后端即服务。如果您需要,请查看我们的网站并联系我们,我们将能够与您合作并帮助您使用BaaS或指导您获得一些有用的资源。

祝你工作顺利!