sgcWebSockets 支持 SignalR 和 SignalRCore 协议,现在我们将通过 CodeProject 网页上的一个 C# 示例,演示如何连接到 SignalR 服务器。您可以通过以下链接访问该文章:
该文章展示了如何使用 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 的已编译项目:
