[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Why no select in luasocket ?
- From: Adolf Mathias <dolfi@...>
- Date: Mon, 05 Feb 2001 07:41:32 +0000
Cary O'Brien wrote:
> This sort of event-driven interface is available in TCL (which also
> has plain old select) . It is called "fileevent". You can set up
> callbacks to run when the file is readable or writeable. This lets
> you set up multi-threaded (sort of) programs without threads. TCL
> handles the select loop. This originally came out of the requirements
> of running TCL under X (i.e. TK), but I use it a lot for server
> programs that have to manage multiple clients.
> > Or another one: simulate an event queue. You register fds. The next-
> > event function selects if no events are present and then builds events
> > on the select result. (This version may get problems because it
> > caches results.)
> > The question is: is it easier to export select and make the register/wait
> > in the highlevel or to implement it completely in C?
> The fileevent interface and having the select loop in the interpreter
> allows some incredible things to happen.
> I have one very, very complex server implemented with fileevents .
> I can start TCL from the command line, start the server from this
> TCL session, and since the interpreter multiplexes both console and
> application IO for me I can examine global data structures and run
> functions from the command line WHILE THE SERVER IS RUNNING.
> The event-driven framework in TCL is way beyond any other scripting
> language, including Python and Perl.
> But this is a lot of work to add to LUA probably.
I don't really think that this would be too difficult: Actually, I wrote
such a thing some time ago, although it is not very clean and very C
file descriptor centric, and so I wouldn't give it away right now. But
essentially, it is a generic C representation of an event source (for
now, file descriptor and timer) and a main loop consisting of repetitive
calls to an event dispatcher. And it's easy for the main loop to invoke
e.g. Lua callbacks.