gpt4 book ai didi

c# - 为套接字/网络连接同步对象-最佳实践不使用WCF?

转载 作者:行者123 更新时间:2023-12-03 12:06:57 25 4
gpt4 key购买 nike

通过套接字连接同步对象的好方法是什么?

到目前为止,这是我想到的。

一个对象,在其getter和setter中,调用Update方法,该方法通过套接字连接将所有类的信息传输到其他已连接的客户端。要在客户端上更新这些更改,将调用一个重载方法,该方法基本上会解析一个字符串以获取其成员的值并进行相应的设置。

这是处理事情的合理方法吗?对于我所读过的Raknet的工作方式,它具有实现期望在需要更新对象时调用的特定方法的功能。

如果您要处理的所有数据都是原始类型,我可以看到这种方法的工作效率低下。但是其他类呢?期望使用API​​的用户在自己的类中调用上述方法是否合理?如果他们使用的标准数据结构没有覆盖方法,该怎么办?

我知道有些事情可以像WCF一样为您完成,但是我确实想实现自己的解决方案,即使它不是WCF可能的最佳选择。

感谢您的任何建议SO用户! :)

最佳答案

尝试使用标准的.NET序列化方法将对象与字符串(或某些二进制Blob)进行相互转换,请参见an article here

我不会在每个属性 setter 上调用Update,因为如果对象具有许多属性,并且用户将更改其中的几个属性,则将有不必要的网络传输,并且速度很慢。相反,用户应该调用像BeginUpdate和FinishUpdate这样的方法,该方法可以嵌套(因此,我将创建一个嵌套计数器)。调用最外层的FinishUpdate时,可以在网络上同步它们。设置者可以检查是否调用BeginUpdate(嵌套计数器大于零),如果不是,则抛出异常。您甚至可以创建一次性对象,该对象将在create上调用BeginUpdate并在Dispose上调用FinishUpdate,因此您可以编写:

using (var ut = new UpdateTransaction(myObject))
// UpdateTransaction constructor calls myObject.BeginUpdate
{
myObject.MyProp = 5;
// ...
}
// at the end of using clause Dispose is called,
// which in turn calls myObject.FinishUpdate

如果您有复杂的对象集,则需要创建一个代表该对象集的类,并将它们全部存储在列表中。然后应为此类(而不是单个对象)实现BeginUpdate/FinishUpdate。

关于c# - 为套接字/网络连接同步对象-最佳实践不使用WCF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1713185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com