By Guest on Friday, 28 March 2025
Posted in General
Replies 4
Likes 0
Views 127
Votes 0
This code can successfully connect to the websocket, but the custom heartbeat doesn't work. If I use the commented-out part of the code, the custom heartbeat works fine. How should I modify my code?

unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
sgcBase_Classes, sgcSocket_Classes, sgcTCP_Classes, sgcWebSocket_Classes, sgcWebSocket_Classes_Indy, sgcWebSocket_Client, sgcWebSocket,
Vcl.StdCtrls, qstring, sgcWebSocket_Types;

type
TForm1 = class(TForm)
sgcWebSocketClient1: TsgcWebSocketClient;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure sgcWebSocketClient1Message(Connection: TsgcWSConnection; const Text: string);
procedure sgcWebSocketClient1BeforeHeartBeat(Sender: TObject; const Connection: TsgcWSConnection; var Handled: Boolean);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
Fws: TsgcWebSocketClient;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
// sgcWebSocketClient1.HeartBeat.Enabled := True;
// sgcWebSocketClient1.url := 'ws://124.222.6.60:8800';
// if sgcWebSocketClient1.Connect(5000) then
// begin
// sgcWebSocketClient1.WriteData('你好');
// Fws.HeartBeat.Interval := 3;
// end;
fws.HeartBeat.Enabled := True;
fws.url := 'ws://124.222.6.60:8800';
if fws.Connect(5000) then
begin
fws.WriteData('你好');
Fws.HeartBeat.Interval := 3;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Fws := TsgcWebSocketClient.Create(Form1);
Fws.OnMessage := sgcWebSocketClient1Message;
Fws.OnBeforeHeartBeat := sgcWebSocketClient1BeforeHeartBeat;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Fws.Free;
end;

procedure TForm1.sgcWebSocketClient1BeforeHeartBeat(Sender: TObject; const Connection: TsgcWSConnection; var Handled: Boolean);
begin
Connection.WriteData(DateTimeToStr(now) + '==>心跳包');
Handled := True;
end;

procedure TForm1.sgcWebSocketClient1Message(Connection: TsgcWSConnection; const Text: string);
begin
Debugout(Text);
end;

end.
Could you please help me take a look at this?
·
1 week ago
·
0 Likes
·
0 Votes
·
0 Comments
·
Hello,

You must set the heartbeat interval before connecting


fws.HeartBeat.Enabled := True;
Fws.HeartBeat.Interval := 3;
fws.url := 'ws://124.222.6.60:8800';
if fws.Connect(5000) then
begin
fws.WriteData('ÄãºÃ');
end;


Kind Regards,
Sergio
·
1 week ago
·
0 Likes
·
0 Votes
·
0 Comments
·
Hello,

You must set the heartbeat interval before connecting


fws.HeartBeat.Enabled := True;
Fws.HeartBeat.Interval := 3;
fws.url := 'ws://124.222.6.60:8800';
if fws.Connect(5000) then
begin
fws.WriteData('ÄãºÃ');
end;


Kind Regards,
Sergio
After I create a component in a thread, it seems the heartbeat stops working again. Do I need any special settings?
·
1 week ago
·
0 Likes
·
0 Votes
·
0 Comments
·
My bad, it was a coding problem. Don't bother with my question!
·
1 week ago
·
0 Likes
·
0 Votes
·
0 Comments
·
View Full Post