バージョン 4.7.0
2023年6月22日
サーバー
バグ修正
機能
WebTransportのサポート
Socket.IOサーバーは、基盤となるトランスポートとしてWebTransportを使用できるようになりました。
WebTransportは、HTTP/3プロトコルを双方向トランスポートとして使用するWeb APIです。WebクライアントとHTTP/3サーバー間の双方向通信を目的としています。
参照
- https://w3c.github.io/webtransport/
- https://developer.mozilla.org/en-US/docs/Web/API/WebTransport
- https://developer.chrome.com/articles/webtransport/
WebTransportのサポートがNode.jsに実装されるまで、@fails-components/webtransport
パッケージを使用できます。
import { readFileSync } from "fs";
import { createServer } from "https";
import { Server } from "socket.io";
import { Http3Server } from "@fails-components/webtransport";
// WARNING: the total length of the validity period MUST NOT exceed two weeks (https://w3c.github.io/webtransport/#custom-certificate-requirements)
const cert = readFileSync("/path/to/my/cert.pem");
const key = readFileSync("/path/to/my/key.pem");
const httpsServer = createServer({
key,
cert
});
httpsServer.listen(3000);
const io = new Server(httpsServer, {
transports: ["polling", "websocket", "webtransport"] // WebTransport is not enabled by default
});
const h3Server = new Http3Server({
port: 3000,
host: "0.0.0.0",
secret: "changeit",
cert,
privKey: key,
});
(async () => {
const stream = await h3Server.sessionStream("/engine.io/");
const sessionReader = stream.getReader();
while (true) {
const { done, value } = await sessionReader.read();
if (done) {
break;
}
io.engine.onWebTransportSession(value);
}
})();
h3Server.startServer();
123b68cに追加されました。
CORSヘッダー付きのクライアントバンドル
バンドルには、適切なAccess-Control-Allow-xxx
ヘッダーが含まれるようになりました。
63f181cに追加されました。
依存関係
engine.io@~6.5.0
(diff)ws@~8.11.0
(変更なし)
クライアント
バグ修正
機能
WebTransportのサポート
Socket.IOクライアントは、基盤となるトランスポートとしてWebTransportを使用できるようになりました。
WebTransportは、HTTP/3プロトコルを双方向トランスポートとして使用するWeb APIです。WebクライアントとHTTP/3サーバー間の双方向通信を目的としています。
参照
- https://w3c.github.io/webtransport/
- https://developer.mozilla.org/en-US/docs/Web/API/WebTransport
- https://developer.chrome.com/articles/webtransport/
Node.jsクライアントの場合:WebTransportのサポートがNode.jsに実装されるまで、@fails-components/webtransport
パッケージを使用できます。
import { WebTransport } from "@fails-components/webtransport";
global.WebTransport = WebTransport;
7195c0fに追加されました。
Node.jsクライアントのCookie管理
withCredentials
オプションをtrue
に設定すると、Node.jsクライアントはCookieをHTTPリクエストに含めるようになり、Cookieベースのスティッキセッションでの使用が容易になります。
import { io } from "socket.io-client";
const socket = io("https://example.com", {
withCredentials: true
});
5fc88a6に追加されました。
デバッグログ付きESMビルドの条件付きインポート
デフォルトでは、ESMビルドはバンドルサイズを増加させるため、ブラウザ環境ではdebug
パッケージを含みません(16b6569を参照)。
つまり、残念ながら、localStorage.debug = ...
属性を設定した場合でも、デバッグログは開発者ツールのコンソールでは使用できません。
条件付きインポートを使用して、debug
パッケージを含むビルドをインポートできるようになりました。Viteを使った例
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
export default defineConfig({
plugins: [react()],
server: {
port: 4000
},
resolve: {
conditions: ["development"]
}
})
参照: https://v2.vitejs.dev/config/#resolve-conditions
781d753に追加されました。
依存関係
engine.io-client@~6.5.0
(diff)ws@~8.11.0
(変更なし)