我不清楚如何使用Dapr的SignalR输出绑定。
如果我理解正确的话,SignalR可以处理三方之间的通信:
我也理解客户端要连接到集线器它必须首先连接到服务器,服务器将执行重定向。。
因为Dapr直接连接到集线器,所以我假设它是服务器,对吗?
如果是的话,我如何将客户端连接到它?
发布于 2022-09-07 14:31:04
@提供了一个很好的关于github的答复
为了获得SignalR服务,客户端需要首先与服务器进行协商,以获得服务的url和访问令牌。Dapr SignalR绑定对此没有内置支持,因此您需要自己实现它。您可以参考本文档,介绍如何手动公开协商端点:https://learn.microsoft.com/en-us/azure/azure-signalr/signalr-reference-data-plane-rest-api#implement-negotiate-endpoint Dapr SignalR绑定似乎只支持输出绑定,因此您只能使用它向客户端发送消息,但不能从客户端接收消息。您可以通过实现web钩子来接收消息来实现这一点。查看此文档以获得详细信息:https://learn.microsoft.com/en-us/azure/azure-signalr/concept-upstream 下面是一个代码片段,展示了如何使用Dapr绑定(使用node.js和express)进行协商和发送消息。希望能帮上忙。 从‘@dapr/dapr’导入{ DaprClient };从‘express’导入jwt;从‘jsonwebtoken’导入jwt;app.get('/send',(req,res) => { client.binding.send('signalr','create',{ Target:'foo',参数:'bar‘};res.send(’foo‘);}).post(’/聊天/协商‘,(req,res) => {res.send端点=/Endpoint=(.*?);/..exec(ConnectionString)1;让accessKey =/AccessKey=(.*?);/..exec(ConnectionString)1;让url =
${endpoint}/client/?hub=${hub};let token = jwt.sign({ aud: url },accessKey,{ expiresIn: 3600 });res.json({ url: url,accessToken:令牌});};app.listen(5000,() => console.log(‘服务器启动’); 然后调用/send发送消息,并在浏览器中使用以下代码来接收消息: 设connection = new signalR.HubConnectionBuilder().withUrl('/chat').build();connection.on('foo',message => console.log(message));connection.start();
为了在服务器上获得用户id,在“元数据”的“用户”字段中获得相同的用户id,他回答说:
在生成令牌时,可以在重新分配的
sub声明中设置用户ID: 设token = jwt.sign({ aud: url,sub:‘},accessKey,{ expiresIn: 3600 });res.json({ url: url,accessToken:令牌});
发布于 2022-09-04 05:11:55
这纯粹是一个输出绑定,因此dapr连接到azure signalr服务,以便向连接到同一个服务实例的客户端发送消息。
您仍然需要有一个服务器进行协商,没有dapr输入绑定。
https://stackoverflow.com/questions/73480768
复制相似问题