Proposal: Socket Engine - Framework and Platform agnostic Angular Universal rendering. #1000
Description
While I personally think that having a separate NodeJS Express server for handling SSR is good solution it's not always possible to do so in every environment.
Therefore we can provide a simple and easily solution that enables Universal on any platform or framework.
Angular Socket Engine
Draft implementation: #999
Framework and Platform agnostic Angular Universal rendering.
Usage Server
npm install @nguniversal/socket-engine @nguniversal/common --save
const socketEngine = require('@nguniversal/socket-engine');
// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const {AppServerModuleNgFactory, LAZY_MODULE_MAP} = require('./dist/server/main');
socketEngine.startSocketEngine(AppServerModuleNgFactory);
This will the socket engine which internally hosts a TCP Socket server.
The default port is 9090
and host of localhost
You may want to leave this as a plain .js
file since it is so simple and to make deploying it easier, but it can be easily transpiled from Typescript.
Usage Client
Your client can be whatever language, framework or platform you like.
Aslong as it can connect to a TCP Socket (which all frameworks can) then you're good to go.
This example will use JS for simplicity
import * as net from 'net';
const client = net.createConnection(9090, 'localhost', () => {
const renderOptions = {id: 1, url: '/path',
document: '<app-root></app-root>'} as SocketEngineRenderOptions;
client.write(JSON.stringify(renderOptions));
});
client.on('data', data => {
const res = JSON.parse(data.toString()) as SocketEngineResponse;
server.close();
done();
});
GRPC Engine
Draft implementation: #1003
Another proposed implementation thats very similar to the above Socket Engine, but instead of using a TCP Socket as the transport it uses GRPC.
This will make consuming it much easier since we can provide the .proto file and you're good to go.
Feel free to discuss advantages of both implementations.