Networking 轻松的服务器和客户端通信

Networking 轻松的服务器和客户端通信,networking,server,network-programming,client,backend,Networking,Server,Network Programming,Client,Backend,我想为我的桌面创建一个程序,为我的android创建一个应用程序。他们两个都会做同样的事情,只是在那些不同的设备上。他们会像个人助理一样,所以我想在他们里面放很多数据(比如联系人、笔记和其他很多东西)。所有这些数据都应该保存在服务器上(至少一开始我会在家里使用自己的Ubuntu服务器) 对于android应用程序,我显然将使用java,服务器上的数据库将是MySQL数据库,因为这是我用于一切的数据库。Windows程序很可能是用这些语言编写的:java,C++语言,因为这些语言我都能很好地使用。

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

对于android应用程序,我显然将使用java,服务器上的数据库将是MySQL数据库,因为这是我用于一切的数据库。Windows程序很可能是用这些语言编写的:java,C++语言,因为这些语言我都能很好地使用。p> 现在转到问题:服务器应该有一个良好的后端,它将与应用程序/程序通信,读取/写入数据库中的数据,管理用户和所有这些内容。但我不确定我应该如何编程后端和“网络通信”本身。我真的希望有一些相对简单的方法在服务器和客户端之间发送安全消息,但我在这方面没有经验。我有一般编程经验,但没有后端和网络编程经验

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


编辑:我想能够扩大规模。一开始我不需要数百人的支持;)

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

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

下面是一些很好的套接字客户端和服务器的C#示例:

另外,你还可以用C#和Xamarin编写Android应用程序。如果你用C#编写了你的桌面程序和Android应用程序,你就可以一次性编写大部分代码,并在两个应用程序之间轻松共享

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

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

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

我真的很想有一些相对简单的方式发送安全 服务器和客户端之间的消息

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

我想“规模大”。首先,该系统将仅由用户使用 但它可能会向更多的人开放,甚至出售。 我希望能够扩大规模。我不需要你的支持 开始时有数百人

我预计可伸缩性可能成为主要挑战。根据您想要扩展的程度,您可能需要转到分布式(大数据)数据库以及分布式服务和消息传递层

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

我不知道你说的“自我编程”是什么意思。通常,后端封装了一些特定于应用程序的业务逻辑

  • 它可能是数据库和http传输层之间的一种逻辑
  • 在更复杂的场景中,您的逻辑可以放在后端后面的异步服务中,这样服务就可以在不阻塞客户端请求的情况下完成它的工作
  • 在最(可能)复杂的场景中,您的后端可能会进行机器学习(例如,如果您希望您的软件堆栈能够了解您的家庭习惯,并根据您的期望实现房屋自动化,而无需实际编写此自动化代码)
但我在这方面没有经验。我有编程 一般经验,但不具备后端和网络编程经验

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

内部开发的后端的替代方案可以是后端即服务