SignalR Server and Client C#

· 组件

sgcWebSockets 支持 SignalR 和 SignalRCore 协议,现在我们将通过 CodeProject 网页上的一个 C# 示例,演示如何连接到 SignalR 服务器。您可以通过以下链接访问该文章:

https://www.codeproject.com/Articles/5162436/Simple-SignalR-Server-and-Client-Applications-Demo#_articleTop

该文章展示了如何使用 SignalR 协议创建简单的服务器和客户端,完整的 C# 源代码托管在 GitHub 上:

https://github.com/nthdeveloper/SignalRSamples

以下内容将展示如何使用 sgcWebSockets连接到这个 SignalR 服务器。

建立连接

为了连接到 SignalR 服务器,我们将使用 TsgcWebSocketClient 作为 WebSocket 客户端,使用 TsgcWSAPI_SignalR 作为 SignalR API。首先创建 WebSocket 客户端和 SignalR API,然后将 SignalR API 附加到 WebSocket 客户端。

WSClient := TsgcWebSocketClient.Create(nil);
SignalRAPI := TsgcWSAPI_SignalR.Create(nil);
SignalRAPI.Client := WSClient;

然后需要设置服务器连接数据。在本例中,服务器监听的 URL 为:http://localhost:8080。TsgcWebSocketClient 有一个名为 URL 的属性,我们可以设置 WebSocket 服务器的 URL,由于使用 WebSocket 协议,URL 将是:ws://localhost:8080 

WSClient.URL := 'ws://localhost:8080';

 最后,SignalR 需要一个 Hub 名称,在本演示中,Hub 名称为 simplehub

  SignalRAPI.SignalR.Hubs.Clear;
  SignalRAPI.SignalR.Hubs.Add('simplehub');

然后,我们可以调用 WSClient.Active := True 来建立新连接。若服务器处于活跃状态,我们将收到来自服务器的消息,告知连接成功。

发送消息 

 连接成功后,我们可以向服务器发送消息,将使用 TsgcWSAPI_SignalR 组件的 WriteData 方法。SignalR 使用专有协议,基本上是一个带有参数的 JSON 消息。在本例中,方法名为 Send,参数为文本消息。消息通过 OnSignalRMessage 事件接收。

SignalRAPI.WriteData(Format('{"H":"simplehub","M":"Send","A":["%s"],"I":1}', [txtMessage.Text]));
procedure OnSignalRSignalRMessage(Sender: TObject; MessageId, aData: string);
begin
  DoLog('[' + MessageId + '] ' + aData);
end;

加入/离开消息 

 服务器示例有 2 个方法,用于将用户加入和从群组中移出。消息格式与 Send 消息非常相似,以下是一些示例:

// join myGroup
SignalRAPI.WriteData(Format('{"H":"simplehub","M":"JoinGroup","A":["%s"],"I":2}', ['myGroup']));
// leave myGroup
SignalRAPI.WriteData(Format('{"H":"simplehub","M":"LeaveGroup","A":["%s"],"I":3}', ['myGroup']));

下载

您可以通过以下链接下载 C# 和 Delphi 的已编译项目: