I'll add what I can, but until I have a demo (which I'm just now
starting) for now just food for thought.
I posted this idea on the CGIDEV2 forum and it didn't get very far, so
I'll pass on a little of it here but focus on getting it coded. It will
be unencumbered open source (no licensing, in public domain, etc.) and
hopefully will be of use to others.
Also, as to Renaissance I looked at their doc a couple of weeks ago
and they also use dataq servers, although you can include all the logic
in the CGI program if you choose. But that's how they architect their
web apps. I had a dicussion with Kevin Turner on this who at least gave
it a good go to try to understand what I was proposing. :)
The idea is similar to Aaron's, dataq servers but coded UI
independent, that is, has no EXFMT's (of course) but also no HTML or XML
generation, etc. That's up to the user interface generation program, be
it CGI, 5250 interactive, or even none with batch program.
The difference in my idea is that I'm going to code all the global
variables in each dataq server program in one or more data structures
and DIM the data structures to a maximum number of concurrent session
users, to be bold here, let's say 10,000.
Then when a dataq entry is written to the server, along with it comes
a session id that was assigned from 1 to 10,000 when the user logged in.
For example, Rennaissance assigns a session id in their environment that
would be correlated to a number between 1 and max users. That number
will then be a data structure index in the program. Every statement will
access variables as x(sess_idx) = something rather than x = something.
This is equivalent of 10,000 session programs and their data, but only
one program and the data in 10,000 data structure arrays.
The key point here is making all web processing the same as 5250
processing as far as state goes. Everything that is in a variable is
still there from last processing, just as we expect and program to in
5250 or any desktop programming, etc.
Of course, all code that can go into subprocedures would go there,
along with their local variables. That should be done anyway, and cuts
down on global variables that would need to be in the persistent data in
data structure arrays in my design.
What I would like to see is an iseries RPG open source framework code
for business processing that would be more powerful than any other
environment, due to the huge overhead of Java and the slowness of script
processing, and added to both the overhead of context switching to
restore state as each web page comes in.
To sum up the CGIDEV2 discussion (which this idea works with as well
anything else), Kevin supports the standard architecture of stateless,
multi-server instances (horizontal scaling), with the idea that multiple
jobs will handle restoring state and processing the incoming page in a
timely manner. In fact, he doesn't see restoring state as that big of a
deal and I do.
Whereas I am proposing a non-standard single instance of each logic
server arrayed to max number of potential sessions, and processing all
incoming for each server out of memory resident data structures. All IO
for a program would go through just the open paths of that single program.
There's higher memory overhead for what I propose, but I believe it is
still significantly less than Java, and I believe the stable logic
processing against files would turn around output at phenomenal speeds.
The DIM can be much less than 10,000, whatever concurrent logins you
expect to support for that app system.
I have more plans within the logic but that's enough to start.
rd
Aaron Bartell wrote:
What if you could create a programming experience that allowed the RPG
programmer to code just like they were communicating with a green screen as
far as program state is concerned, but instead be communicating with the
browser?
As an Amazon Associate we earn from qualifying purchases.