mirror of
https://github.com/socketio/socket.io.git
synced 2026-01-10 23:48:02 -05:00
feat: favor WebTransport over WebSocket
This commit ensures that when there are multiple possible upgrades
(like WebSocket and WebTransport), then the WebTransport is favored and
the other upgrades are delayed.
Following 7195c0f305
This commit is contained in:
@@ -257,7 +257,7 @@ export class Socket extends Emitter<
|
||||
public writeBuffer: Packet[] = [];
|
||||
|
||||
private prevBufferLen: number;
|
||||
private upgrades;
|
||||
private upgrades: string[];
|
||||
private pingInterval: number;
|
||||
private pingTimeout: number;
|
||||
private pingTimeoutTimer: NodeJS.Timer;
|
||||
@@ -601,7 +601,19 @@ export class Socket extends Emitter<
|
||||
this.once("close", onclose);
|
||||
this.once("upgrading", onupgrade);
|
||||
|
||||
transport.open();
|
||||
if (
|
||||
this.upgrades.indexOf("webtransport") !== -1 &&
|
||||
name !== "webtransport"
|
||||
) {
|
||||
// favor WebTransport
|
||||
this.setTimeoutFn(() => {
|
||||
if (!failed) {
|
||||
transport.open();
|
||||
}
|
||||
}, 200);
|
||||
} else {
|
||||
transport.open();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -115,6 +115,30 @@ describe("WebTransport", () => {
|
||||
);
|
||||
});
|
||||
|
||||
it("should favor WebTransport over WebSocket", (done) => {
|
||||
setup(
|
||||
{
|
||||
transports: ["polling", "websocket", "webtransport"],
|
||||
},
|
||||
({ engine, h3Server, certificate }) => {
|
||||
const httpServer = createServer();
|
||||
engine.attach(httpServer);
|
||||
httpServer.listen(h3Server.port);
|
||||
|
||||
const socket = createSocket(h3Server.port, certificate, {
|
||||
transports: ["polling", "websocket", "webtransport"],
|
||||
});
|
||||
|
||||
socket.on("upgrade", (transport) => {
|
||||
expect(transport.name).to.eql("webtransport");
|
||||
|
||||
httpServer.close();
|
||||
success(engine, h3Server, done);
|
||||
});
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
it("should send ping/pong packets", (done) => {
|
||||
setup(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user