Hello,

>> - On Apache ARP project, they said they created it instead of using
>> glib because the lack of IPC functions like memory mapping.
> This makes no sense since they could use glib and also write mmap
> functions...
   Well, that's what I thought too. That's why I made the decision to
ask here if it would make sense.

>> - In some forums, people were complaining about the fact glib aborts
>> when memory allocation fails, which is bad for a 24/7 running web
>> server.
> A robust Web server would probably have a framework that restarted
> components as needed; Apache already does some of this with "workers".
>
> The main problem with memory allocation comes when someone else's
> process is using all the memory.

   My server code is too smal yet to compare, but it is being already
planned to do it. I start each application hosted by my server in a
different  process, so I will be able to restart it if the process
segfaults or quits for some reason. But I think like this (please tell
me if you agree or not):
 - If the server itself (my code) seg fault, so it should stop. I
should solve this by fixing my code, not by writting whatdog for it,
as I explained above;
 - However, as you said, if someone elses code (like applications or
service plugins in my case) segfaults, my server should be able to
restart the applications as needed.
    But I pay a price for it. As this is implemented with IPC and I
need multiple processes, I will spend more computer resources
(CPU/memory) to deal with it, to make it more reliable. Pays the way,
but I imagine it's where it will need more optimization.

> If you are writing a new Web server (why?) glib is probably fine.

   By this affirmation, I understand glib is not only a basis for
desktop app, right? Good! I will like to use it.
   The reason why I am writting is a bit of Linus Torwalds fault. :D
After reading hundreds of messages on a GIT mailing list on a thread
he started (http://article.gmane.org/gmane.comp.version-control.git/57918),
I realized I agree with him. My intention is not exactly to write a
web server, but an application server, like JBoss
(http://www.jboss.org/), but in C. I use Java app servers on my
day-by-day work, but just because people pay me to do that. I _hate_
Java resource consumption and I think it should exist a FAST, easy to
use alternative in C.
    It's my pet project, by now.

> Don't fight it, though. There's no portable way to find the system's
> free memory, and even if there were, it wouldn't help -
>
>    if (amount_of_memory < amount_available) {
>         // imagine that after that test succeeds,
>         // your program happens to get swapped out,
>         // and another program allocates all of memory
>
>         allocate_memory(); // fails
>    }

   You are right. I haven't thought about it.

> So it's better to assume that things will fail. Robustness does not come
> from avoiding failure - it comes from recovering from failure.

This paragraph made me think a lot (thanks for it!). I fully agree
with you if I think on others' processes, but talking about the server
itself... Need to think. Anyway, the fact glib exits when memory
allocation fails wouldn't stop me from using it. I am sure there is a
way of solving it, one way or another. Of course finding it will be a
bit hard... But will think carefully on what you've said.

> For a Web server that may just mean restarting. Sure, some users will
> have to reload Web pages; if that's actually a problem, use persistent
> storage to record state.

   In the case of my server, each request may result in an open
database connection and possibly a started transaction. Stop all
current transactions because the server is on its limit is something
that might happen, but I don't consider good. I can recover from that,
but finding a way of not letting that happen would be preferable.

> Apache and IIS are fairly large codebases for a reason, though -- a
> secure reliable production Web server would have a lot of catching up to
> do.
    Sure, but I have no intention of replacing it. I plan to let my
server work as an apache or NGinx plugin someday. My project is much
more like Phusion Passenger (http://www.modrails.com/) or JBoss, but
for C development.
    Of course there will be a lot of catching up too, but differently
of these servers, that focus mostly on how to service something in a
reliable way, I want to focus on providing an easy to use API for the
application developer, as my server hosts applications. I would
provide services like message queueing, database connection pools,
load monitoring, etc.
    Here is where I found the power of gnome would help me a lot. By
using the APIs provided by gnome, as GDA, GLib itself, GIO, etc., the
application developer would have a portable, powerful and easy to use
API at his/her disposal, to write server side apps and application
middleware.
    Unless all these libs are supposed to be used only by desktop apps
and I shouldn't be trying to use it for middleware... :D

> But, it's fun writing Web servers :-)
   you bet!  ;-)

Best regards,
-- 
Marcelo Elias Del Valle
http://mvalle.com
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to