reliable-zeromq
Version:
A collection of reliable zeromq messaging constructs
71 lines (61 loc) • 1.77 kB
text/typescript
import { PerfTest } from "simple-perf";
import { Delay } from "../../Src/Utils/Delay";
import { ZMQPublisher } from "../../Src/ZMQPublisher";
import { ZMQSubscriber } from "../../Src/ZMQSubscriber/ZMQSubscriber";
import TestEndpoint from "../Helpers/TestEndpoint";
const lPublishEndpoint: string = TestEndpoint.GetEndpoint("PublishPerformance");
const lRecoveryEndpoint: string = TestEndpoint.GetEndpoint("PublishRecoveryPerformance");
const lPublisher: ZMQPublisher = new ZMQPublisher(
{
PublisherAddress: lPublishEndpoint,
RequestAddress: lRecoveryEndpoint,
},
);
const lSubscriber: ZMQSubscriber = new ZMQSubscriber();
let lCallback: (aMessage: string) => void = undefined!;
function Resolver(aMessage: string): void
{
lCallback(aMessage);
}
lSubscriber.Subscribe(
{
PublisherAddress: lPublishEndpoint,
RequestAddress: lRecoveryEndpoint,
},
"PerfTest",
Resolver,
);
function PublishReceive(): Promise<void>
{
lPublisher.Publish("PerfTest", "PerfData");
return new Promise((aResolve: () => void): void =>
{
lCallback = aResolve;
});
}
const lBenchmarks: PerfTest[] =
[
new PerfTest(
{
Name: "PublishSubscribe > Synchronous Throughput",
Function: PublishReceive,
FunctionReturnsPromise: true,
Console: true,
State: [
{ Key: "lPublisher", Value: lPublisher },
],
},
),
];
async function RunTests(aBenchmarks: PerfTest[]): Promise<void>
{
await lPublisher.Open();
await Delay(500);
for (let i: number = 0; i < aBenchmarks.length; ++i)
{
await aBenchmarks[i].Run();
}
lSubscriber.Close();
lPublisher.Close();
}
RunTests(lBenchmarks);