标签: bidirectional

双向命名管道问题

我有两个应用程序,我想通过.NET 3.5上的命名管道进行通信.它是一个请求/响应范例,数据以XML格式传输,使我的生活更轻松.有一个监听器应用程序,以及一个将请求发布到管道的应用程序.我正在尝试使用双向管道来做到这一点.我遇到的问题是对StreamReader.ReadToEnd()的调用似乎没有返回.我该怎么做才能解决这个问题?

听众代码

public Class Listener
{
    private void ThreadFunc()
    {
       var pipe = new NamedPipeServerStream("GuideSrv.Pipe",PipeDirection.InOut);
       var instream = new StreamReader(pipe);
       var outstream = new StreamWriter(pipe);
       while (true)
       {
           pipe.WaitForConnection();
           var response = ProcessPipeRequest(instream);
           outstream.Write(response.ToString());
           pipe.Disconnect();
       }
    }
    private XDocument ProcessPipeRequest(StreamReader stream)
    {
        var msg_in = stream.ReadToEnd();  // << This call doesnt return
        var xml_in = XDocument.Parse(msg_in);
        // do some stuff here 
        return new XDocument(....);
    }  
}
Run Code Online (Sandbox Code Playgroud)

请求者代码

public XDocument doIt()
{
    var xml = new XDocument(....);
    using (var pipe …
Run Code Online (Sandbox Code Playgroud)

.net bidirectional named-pipes .net-3.5

2
推荐指数
1
解决办法
4110
查看次数

时间复杂性 - 双向Dijkstra

我想知道双向Dijkstra算法的时间复杂度.

使用Min-Heap的普通Dijkstra有O(n log n + m).我的猜测是双向保持不变.然而,维基百科建议双向搜索的改进通常可以用O符号表示.

这是否可以计算双向Dijkstra以及如何计算?

algorithm dijkstra bidirectional time-complexity

2
推荐指数
1
解决办法
994
查看次数

关于 http/2 的文章中关于双向和全双工的混淆

一些描述 http/2 的文章称赞它是双向和全双工的。

AFAIK 双向意味着通信是双向的,所以双工本质上是双向的,是吗?

双工可以由一个在某些特定点反转的单工流创建(半双工),也可以创建为两个相反的单工流(全双工)。

也许双向是关于如何发起消息交换?在 http/1 中,只有客户端可以通过向服务器发送请求来启动,服务器在其中返回响应。在 http/2 中,服务器可以发送(推送)一些资源而无需明确要求它。但是我们可以Server-sent events在http/1.1中使用(也就是说,在客户端和服务器上都做了一些配置后,如果它愿意,服务器可以推送消息,但它仍然是通过http/1.1协议)。

当您考虑它时,您可能会注意到 http/1 也是双向和全双工的(因为在半双工中流水线是不可能的)。所以从 http/2 的角度来看这里没有变化。

发生变化的是 http/1 要求响应按照请求的确切顺序到达。http/2 通过流和多路复用提升了这一点。

duplex bidirectional http2

2
推荐指数
1
解决办法
3168
查看次数

Python中实现双向关联关系

在 Martin Fowler 的 UML Distilled 的“双向关联”部分,他说:

在编程语言中实现双向关联通常有点棘手,因为您必须确保两个属性保持同步。使用 C#,我使用以下代码来实现双向关联:

书中的代码

class Car...
public Person Owner {
get {return _owner;}
set {
if (_owner != null) _owner.friendCars().Remove(this);
_owner = value;
if (_owner != null) _owner.friendCars().Add(this);
}
}
private Person _owner;
...

class Person ...
public IList Cars {
get {return ArrayList.ReadOnly(_cars);}
}
public void AddCar(Car arg) {
arg.Owner = this;
}
private IList _cars = new ArrayList();
internal IList friendCars() {
//should only be used by Car.Owner
return _cars;
}
.... …
Run Code Online (Sandbox Code Playgroud)

python oop uml class-diagram bidirectional

2
推荐指数
1
解决办法
556
查看次数

用于管理双向关联和反向更新的通用Java框架

我一直在寻找一种处理双向关联的通用方法,以及一种处理手动编写的Java代码中的逆更新的方法.

对于那些不知道我在说什么的人,这里有一个例子.下面是我目前的(不满意)解决方案的结果.

public class A {
    public B getB();
    public void setB(B b);
}

public class B {
    public List<A> getAs();
}
Run Code Online (Sandbox Code Playgroud)

现在,在更新关联的任何一端时,为了保持一致性,另一端也必须更新.每次手动

a.setB(b);
b.getA().add(a);
Run Code Online (Sandbox Code Playgroud)

或者通过在setter/getter中放置匹配代码并使用自定义List实现.

我发现了一个过时的,未维护的项目,其依赖关系不再可用(https://e-nspire-gemini.dev.java.net/).它通过使用用于自动注入必要代码的注释来处理问题.

有没有人知道另一个框架,以一种通用的,不引人注目的方式处理这个ala gemini?

ciao,Elmar

java associations bidirectional inverse

1
推荐指数
1
解决办法
1763
查看次数

在领域驱动设计中强制执行跨多个聚合的不变量(集验证)

为了说明这个问题,我们使用一个简单的例子:有两个聚合 -LampSocket。必须始终强制执行以下业务规则: aLamp和 aSocket都不能同时连接多次。为了提供适当的命令,我们设想了一个Connector带有Connect(Lamp, Socket)-method 的服务来插入它们。

因为我们希望遵守一个事务只涉及一个聚合的规则,所以不建议在事务中对两个聚合设置关联Connect。所以我们需要一个象征Connection自身的中间蕴。因此Connect-transaction 只会Connection使用给定的组件创建一个新的。不幸的是,此时麻烦开始了;如何保证连接状态的一致性?可能会发生许多并发用户想要在同一时间插入相同的组件,因此我们的“一致性检查”不会拒绝该请求。新的Connection聚合将被存储,因为我们只锁定聚合级别。即使不知道这一点,系统也会不一致。

但是我们应该如何设定聚合的边界来确保我们的业务规则呢?我们可以设想一个Connections聚合,它收集所有活动连接(作为Connection实体),从而使我们的锁定算法能够正确拒绝重复的Connect请求。另一方面,这种方法效率低下且无法扩展,而且在领域语言方面也是违反直觉的。

你知道我错过了什么吗?

编辑:为了总结这个问题,想象一个聚合User。由于聚合的定义是基于事务的单元,我们可以通过锁定每个事务的该单元来强制不变量。一切皆好。但现在出现了一条业务规则:用户名必须是唯一的。因此,我们必须以某种方式使我们的总体边界与这一新要求相协调。假设有数百万用户同时注册,这就成了一个问题。我们尝试确保非锁定状态下的这种不变性,因为多个用户意味着多个聚合。

根据 Eric Evans 所著的《领域驱动设计》一书,一旦单个事务中涉及多个聚合,就应该应用最终一致性。但这真的是这样吗?这有道理吗?

在这里应用最终一致性需要注册User并随后使用用户名检查不变量。如果两个Users 实际上设置了相同的用户名,系统将撤消第二次注册并通知User. 想到这种情况让我感到不安,因为它扰乱了整个注册过程。例如,发送确认电子邮件必须延迟等等。

我想我只是忘记了一些一般的事情,但我不知道是什么。在我看来,我需要类似Repository级别上的不变量之类的东西。

domain-driven-design aggregate boundary bidirectional

1
推荐指数
1
解决办法
2313
查看次数

StructureMap双向/循环依赖的问题

我目前正在我们的业务层中集成StructureMap,但由于双向依赖性而存在问题.

该层包含多个管理器,每个管理器可以相互调用方法:没有通信限制或规则.这还包括可能的循环依赖性,如下例所示.我知道设计本身是有问题的,但目前我们只是希望StructureMap能够工作,并将在未来专注于进一步的重构.

每个经理实现IManager接口:

internal interface IManager
{
  bool IsStarted { get; }

  void Start();
  void Stop();
}
Run Code Online (Sandbox Code Playgroud)

并且还有自己的特定界面:

internal interface IManagerA : IManager
{
  void ALogic();
}

internal interface IManagerB : IManager
{
  void BLogic();
}
Run Code Online (Sandbox Code Playgroud)

这是两个虚拟管理器实现:

internal class ManagerA : IManagerA
{
  public IManagerB ManagerB { get; set; }

  public void ALogic() { }

  public bool IsStarted { get; private set; }
  public void Start() { }
  public void Stop() { }
} …
Run Code Online (Sandbox Code Playgroud)

structuremap circular-dependency bidirectional

0
推荐指数
1
解决办法
3646
查看次数

在Vue.js中转换v模型绑定值

考虑这个例子:

<input type="text" v-model="value">
<span>Value is: {{ value }}</span>
Run Code Online (Sandbox Code Playgroud)

我想要的是放置一个双向转换函数,它将以一种形式在输入字段中显示值,但将其保存在另一种形式的数据中.最简单的例子是否定数值:如果用户输入5,我想要实际接收的数据?5.在Vue.js 1.0中实现这一目标的最佳方法是什么?

javascript data-binding bidirectional vue.js

0
推荐指数
2
解决办法
2126
查看次数