Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Websocket服务器发送自发消息(无需客户端请求)_C#_System.net.websockets - Fatal编程技术网

C# Websocket服务器发送自发消息(无需客户端请求)

C# Websocket服务器发送自发消息(无需客户端请求),c#,system.net.websockets,C#,System.net.websockets,我必须承认我可能错过了一些基本的东西。如果是,请指出。下面是我对websocket服务器的理解 我正在尝试编写一个websocket服务器,它应该让客户机不断更新他们请求执行的作业的状态。有一个初始交换,客户机在其中标识自己并发送作业ID,但从那一刻起,客户机基本上不向服务器发送任何其他消息。服务器一旦知道其后端的更新状态,就会向客户机发送一条消息,客户机会做出相应的反应(通常不会返回消息) 这是我的第一台websocket服务器,因此我遵循Microsoft提供的以下示例作为参考: 该示例实现

我必须承认我可能错过了一些基本的东西。如果是,请指出。下面是我对websocket服务器的理解

我正在尝试编写一个websocket服务器,它应该让客户机不断更新他们请求执行的作业的状态。有一个初始交换,客户机在其中标识自己并发送作业ID,但从那一刻起,客户机基本上不向服务器发送任何其他消息。服务器一旦知道其后端的更新状态,就会向客户机发送一条消息,客户机会做出相应的反应(通常不会返回消息)

这是我的第一台websocket服务器,因此我遵循Microsoft提供的以下示例作为参考:

该示例实现了一个回复客户端消息的echo服务器。由于我的不同需要,我重写了它,以便在
while
循环之前调用一次对
ReceiveAsync
的调用。在循环内部,我的服务器检查其状态,并在需要时发送更新消息

但是,如果我在
while
循环中调用
ReceiveAsync
(我的更新消息逻辑也是如此),那么循环基本上会被阻塞:如果我
等待
接收消息,但客户机通常不发送任何消息,我就有效地阻止了我的服务器进入循环的下一次迭代。因此,我删除了调用ReceiveAsync的调用:我不希望收到消息,一切正常

我的问题是,我没有检查关闭消息,因为我只调用了一次
ReceiveAsync
。此外,我没有一个真正的全双工,这是现在的罚款,但这可能会改变在未来(或为不同的项目)

因此,关于实际问题:

1) 是否需要特别等待
关闭
消息?
或者我是否可以假设当客户端的websocket对象被销毁时,websocket会自动终止

2) 如何实现全双工通信?在传统的套接字中,我会有一个无限循环,我会检查是否有东西要读(构造消息、使用消息等),然后是否有东西要发送给客户端,然后迭代:如果没有东西要读,我会继续。但是,
ReceiveAsync
似乎是接收数据或检查是否有数据的唯一方法,如果没有数据,它就放在那里,永远不会完成


我是否应该停止使用
System.Net.Websockets
,转而使用更具特色的库?我发现的所有这些都是关于“回复”客户机消息的,所以我不确定它们是否适合我的需要(也许这只是一个缺乏示例和文档的例子)

我知道这是一个老问题,但您是否曾经在收听取消令牌时设法继续循环?我有一个类似的问题,我想知道是否有人可以help@Maya对不起,我帮不了你:这是一个公司项目,我必须找到一个解决方案,所以我放弃了使用WebSocket的想法,转而进行状态调查(我知道很难看)