繁体   English   中英

关于客户端的建议-服务器体系结构

[英]advice on client - server architecture

我正在进行概念应用的证明,也许一天将成为一种收入来源。
数据流指示必须是客户端-服务器应用程序,信息在客户端之间共享,并且应该保留。

我有编写独立应用程序的经验,已经为应用程序建模并编写了客户端。 与服务器的通信只是一个存根。

所以现在我有了一个带有方法调用的(C#)接口形式的协议。
其中四个呼叫用于请求信息,两个用于将数据推送到服务器。
数据位于我想冻结并在另一侧恢复的类中。

将来,我想将客户端移植到其他操作系统上,因此,如果我无法避免,那么我不想做一些必须从崩溃中重写服务器的事情。

我还想以不确定的间隔更新客户端中的数据。 今天我不知道该怎么做。
我的应用程序是单线程的Windows窗体

我的假设是:
*我将在所有内容下方以某种形式使用TCP / IP 我必须设置频道,设置IP地址和类似的东西,我知道该怎么做。
*服务器的前端将是多线程的,以允许一个以上的客户端同时与服务器通信。 同步将在服务器内部。
*预计的最大数据量:文本1000 * 1kbyte,带有4个状态的100000个对象。 每天2万次更新。 但这是将来的方式。

五月最大的三个问题是
1. 通信协议 如何将接口中的方法调用映射到可以在TCP / IP通道上传输的方法调用?
2.我需要一个关于将读和写序列化为“数据库”的良好模式的建议,数据库不必是sql服务器。
3.是否可以让服务器将更新发送给客户端,而不必使其成为一个只有一个线程监听套接字的多线程应用程序?

如果需要更多信息,我会很高兴地更新我的问题。
提前致谢。
戈尔根

声音就像.Net远程处理的好候选人。

这将抽象出许多低级字节移位,并允许您使用域级语言编写通讯代码。

从它的声音来看,WCF就是您的小巷。 尽管乍看之下可能会有些复杂,但是事情相当简单。 这样,您就可以让框架处理异步调用并连接其网络侧。

至于将更新发送到客户端的服务器,您将需要查看WCF中的双工绑定,并在服务器端查看已知(已连接)客户端的列表。 当然,将所有对客户端的调用都包装在try-catch块中,因为您永远不知道何时会出现打ic,并且突然无法访问客户端。

我只想在Agent_9191的答案中添加一些内容,并记录我为后代采取的步骤:

问题1

  • 仔细阅读入门教程 (不,我没有,但我希望我能做到)

  • 将示例更改为适合我自己的界面

  • 默认生成的代理会相当大地更改接口。 由于传递机制的缘故,所有集合类都被做成数组,并且要转移的所有类都被剥夺了所有方法。 要访问无论是在服务器和客户端领域类遵循的建议这个帖子

  • 必须使用System.Runtime.Serializion.dll中的[DataContract][DataMember]对要使用的域类进行序列化

  • 这些WCF示例也帮助我了解了发生了什么

问题2

  • 制作了一个再次实现我的界面的类
  • 在服务中添加了静态实例
    private static MyManager myManager = new MyManager();

  • 简单地转发所有电话
    public Project[] GetProjects() { return myManager.GetProjects(); }

问题3

双向合同: 如何:创建双工合同

现在,我将在内存中而不是在数据库中拥有状态,当我更改时,我将重新考虑该方法。

1)请对此问题进行详细说明。 我不完全了解您想要在这里解释什么。

2)我不确定您的意思(对编程模式一无所知),但异步读写不是明智的选择,因此仅当您有一些要读取的内容时才访问数据库/写

3)是的,这是可行的,但您确实应该创建另一个线程来更新您的客户端。 出于以下几个原因,建议这样做,但主要是希望尽可能地划分程序逻辑,以使您更轻松地隔离软件中的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM