socketio / socket.io

Realtime application framework (Node.JS server)
https://socket.io
MIT License
60.66k stars 10.09k forks source link

dynamic transports #5075

Open mrfelfel opened 3 years ago

mrfelfel commented 3 years ago

Transports must be dynamic to provide transports independently. In my opinion, by making dynamic transports, it is possible to add custom transports such as tcp, mqtt gprc, etc.

But this issue is not implemented in engine.io (or there is no suitable document for it)

Solution I think providing transport independently, such as engineio-websocket-transport, could be better than the current situation and make it possible to implement different transports.

mrfelfel commented 3 years ago

Related to socketio/socket.io#5081

mrfelfel commented 3 years ago

engine.io based on the HTTP request, but for Support TCP or other protocols as Transport The concept of receiving queries in Engine.io should be developed

in Anatomy of an Engine.IO session Transport establishes a connection to the Engine.IO with a URL

The connection should be established without a URL as optional

darrachequesne commented 3 years ago

The transports array is exported here: https://github.com/socketio/engine.io/blob/e5b307c16d8e7594fcec4eb23508f23f78546dc6/lib/engine.io.js#L70 (added in https://github.com/socketio/engine.io/commit/49f9adc2086808a0639b1648bc6198adf6b810c7)

So it should be possible to provide additional transports. There is currently no documentation for this though, as you have noted.

mrfelfel commented 3 years ago

the transports array is a good idea, of course, each transport should be an independent module (like socket.io Redis adapter) and another point for providing additional transports(like TCP), URL is a bottleneck

darrachequesne commented 1 month ago

Update: the client-side now has a way to provide a list of transport implementations:

import { Socket, XHR, WebSocket } from "engine.io-client";

const socket = new Socket({
  transports: [XHR, WebSocket]
});

Added in version 6.6.0.

Note: this is not implemented on the server side yet.