【发布时间】:2020-04-09 22:59:24
【问题描述】:
我正在创建一个消息传递系统,但我遇到了问题。在返回 Publish 函数之前,我需要发布消息并等待响应。
这就是我的函数的样子
public async Task<bool> Publish(int ClientId, string msg){
...
// Wait and check if the client the message was sent to respond
// if that does not happen within 5 seconds, return false, else true
}
private async Task MessageIntercept(int ClientId, string msg){
// Intercepts all messages
...
}
这两个函数都在服务器上,并且只要发送消息(包括使用 Publish 方法发送的消息),MessageIntercept 任务就会自动运行。我可以通过调用上面提到的服务器项目的发布功能从我的 asp.net 网站项目发送消息
基本上我想做的是调用bool Success = Publish(1,"This is a test") 并能够确定消息是否成功发送,客户端是否理解并在 5 秒内恢复消息。
这是一步一步发生的:
- 我用
Publish从服务器向设备发送了一条消息 - 消息被
MessageIntercept方法截获(这个我不是很在意,但是代码是这样写的,所有消息都被截获了) - 客户端接收并处理消息
- 客户端响应,消息在
MessageIntercept被截获,这是我想在返回Publish方法之前验证消息的地方
示例消息;
服务器消息:
{
ClientId: 13,
msg: "Hello World"
}
客户响应:
{
ClientId: 13,
msg: "{Success: true}"
}
MessageIntercept 拦截所有消息,包括刚刚发送的请求,由于它是请求而不是响应,因此应该忽略它。但是,一旦客户端以消息响应,我想告诉 Publish 方法响应已成功完成,然后返回 true。否则,如果客户端在 5 秒内没有响应,则应假定为 false。
【问题讨论】:
-
MessageIntercept 在这里的重要性是什么?我假设“发布”发出服务器请求,所以整个逻辑都是从发布的角度来看的。
-
@Erndob MessageIntercept 是必需的,因为来自客户端的消息不是由发布方法运行的
-
MessageIntercept方法是怎么调用的?期待吗?
标签: c# asp.net asynchronous message-queue messaging