[英]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.