r3wp [groups: 83 posts: 189283]
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

World: r3wp

[!Cheyenne] Discussions about the Cheyenne Web Server

Ryan
11-Nov-2011
[10861]
Cheyenne-server.org is taking a long while to serve the wiki pages.
Dockimbel
11-Nov-2011
[10862x2]
Main PHP process froze. I'm restarting it.
Done.
Janko
12-Nov-2011
[10864x3]
btw: I added few lines to cheyenne so it solves my only major hurdle 
with javascript (I need to write a lot of javascript for my apps, 
and I use sort of functional style). shorter syntax for anonymouse 
functions + returns. Nothing big or complex...
f{ a, b | .... }  ==>  function ( a, b ) { ..... } 
r{ a, b | a + b } ==> function ( a, b ) { return a + b } 

not sure if it's usefull to anyone else or has place in real cheyenne, 
since it's just more of a hack (and not standard in any way). If 
anyone need it, let me know)
I just added few lines to parse where it compiles in it's multilang 
stuff - which is btw very good since it does it only once and then 
holds cached version same as for languages :)
nenad designed cheyenne very well, that's why it's so fast!
Kaj
17-Nov-2011
[10867x2]
Here's inspiration for Cheyenne/Red:
http://gwan.ch/
Dockimbel
18-Nov-2011
[10869x3]
I am not sure that web developers are ready to jump to C for writing 
their server-side scripts (especially with error reports that include 
CPU registers content :-) ).
The main benchmark graph is basically testing how fast each server 
is able to copy chunks of memory. ;-)
http://gwan.ch/benchmark
Also, this is closed source software.
sqlab
18-Nov-2011
[10872]
I tried gwan on Windows with a logs directory as described in the 
manual. It crashed.
Also the listen options on startup did not work.
Kaj
18-Nov-2011
[10873x2]
Copying chunks of memory is what you do when serving static files, 
isn't it?
Cheyenne/Red doesn't have to be closed source and write scripts in 
C
Dockimbel
18-Nov-2011
[10875]
Yes, especially when you're serving only to localhost (like in the 
gwan benchmark).
Kaj
18-Nov-2011
[10876]
The main point is that G-WAN basically uses the BeOS/Syllable architecture: 
one process with worker threads
Dockimbel
18-Nov-2011
[10877]
That's what I plan to do too for Red.
Kaj
18-Nov-2011
[10878]
Specifically, it uses a pool of one thread per core for an event 
based architecture
Dockimbel
18-Nov-2011
[10879]
That's the only rational way to use threads IMO too.
Kaj
18-Nov-2011
[10880x2]
Well, there you have it: the other web servers don't
Sqlab, G-WAN for Windows is discontinued, a year ago or so
sqlab
18-Nov-2011
[10882]
Yes, but I just used the examples as they are explained in the manual 
for the windows version.
Kaj
18-Nov-2011
[10883x2]
It seems to have been developed on Server 2003. Maybe it doesn't 
work on newer Windows versions. It was discontinued in September 
2009
That was probably when G-WAN had been in development for a year, 
so in any case it would be incomparable to the current Linux version, 
which is not mature yet, either
Janko
19-Nov-2011
[10885]
Just one question, nothing urgent. Would it be possible or smart 
if cheyenne would return http 401 to ajax request when the session 
times out? Now it basically return 200 and login form html (so I 
have to test for presence of </form>) instead of usuall JSON.
Dockimbel
19-Nov-2011
[10886x2]
How can Cheyenne know that's an "ajax request"?
It should be possible to either extend the AUTH config option to 
specify an "ajax" mode or to add a new AUTH-AJAX config option.
Janko
19-Nov-2011
[10888x2]
yes, that question crossed my mind :) ... maybe this should hold 
only if request has: "Accept: application/json"
or like you check now it here is any html returned in debug more, 
if not you don't render the debug bar
Dockimbel
19-Nov-2011
[10890x3]
What if the request has other mime-types in addition to that one? 
:-)
Cheyenne doesn't return HTML when a session times out, it only returns 
a 301 (or 302, I don't remember) to the URL you've specified in the 
config file after AUTH.
So, there's nothing to parse there for Cheyenne.
Janko
19-Nov-2011
[10893x2]
yes, I agree it's not so straightforward .. you could only redirect 
when there is accept: "*html*" ..
yes, that is true.. you make a redirection
Dockimbel
19-Nov-2011
[10895]
So, if you redirect to an AJAX-generating script, it should be ok 
(depending how your application is handling login).
Janko
19-Nov-2011
[10896]
but XMLHttpRequest isn't able to return any of 30* codes .. in case 
of 30* it automatically redirects and returns the result with 200
Dockimbel
19-Nov-2011
[10897x2]
So, if you could specify, for example: AUTH <http code> (instead 
of providing an URL), would it work with XHR?
In such case, Cheyenne would just return an HTTP code with no content 
and would let the client handle the redirection to login form (or 
whatever other action is suited).
Janko
19-Nov-2011
[10899x2]
as I say, it's not a practical problem for me. :) Just a suggestion.. 
I am making external API and I got some developers that are very 
sensitive to propper HTTP so I am rewriting my api to all those codes.. 
But this is not a problem for that, since API doesn't use cheyenne's 
sessions.. just while I am rewriting my ajax code I thought of it.
I can detect all other codes with XHR yes, except 3* ..  so if server 
returned 401 without content JS would then make what is appropriate.
Dockimbel
19-Nov-2011
[10901x3]
In the next days, I will spend a day or two on Cheyenne, to fix a 
few pending issues (like the broken websocket compatibility after 
latest RFC changes).
If you need it, I should be able to add it easily.
If you think there's a more general solution to this use-case, let 
me know.
Janko
19-Nov-2011
[10904x3]
This was my old code because ot it (I check for </html> and </form> 
to see if I signed out) . Now I am making it status for validation 
for example it will be status 403, etc ..


    onChange2: function(rq, pars) {
        this.assureLANG();
        if (rq.readyState == 4) {
            if (rq.responseText) {
                if ( rq.responseText.indexOf('</html>') > 0 ) {

                    if ( rq.responseText.indexOf('</form>') > 0 ) {
                        alert(LANG.err.session_exp);

                        window.location = window.location.href.replace(/#.*/g, "")+"";
                    } else {
                        alert(LANG.err.ajax_err);
                    }
                } else {
                    c(r.responseText);
                }
            } else { this.onError(); }
        }
    },
--

You really don't have to change it now .. you can add this any time 
later when it maybe clears out even better .. I don't want to keep 
you from RED
Cheyenne was serving me well for all this time and this is no real 
issue .. just a notice for future maybe
Dockimbel
19-Nov-2011
[10907x3]
Well, the biggest task is getting websockets up again, modifying 
AUTH should really be a matter of a few lines of code.
I also need to review PHP support as I will make a Cheyenne presentation 
next week at a big PHP meeting here.
So, I will spend at least a day on it.
Janko
19-Nov-2011
[10910]
I quickly mocked up how ajax code would look if you made it return 
401

    onChange2: function(rq, pars) {
        this.assureLANG();
        if (rq.readyState == 4) {
            if (rq.status == 401) {
                alert(LANG.err.session_exp);

                window.location = window.location.href.replace(/#.*/g, "")+"";
            } else if (rq.status = 200) {
                success(r.responseText);
            } else if (rq.status == 403) {
                validation(r.responseText);
            } else {
                this.onError();
            }
        }
    },