Session object pool

Александр Домо domo at ...62...
Thu Dec 8 20:03:15 CET 2011


> Hello Alexander,
>
>> I'm writing a server application which acts as a communicator between  
>> it's
>> clients. Each of my sessions needs to know about other active sessions,  
>> so
>> what I'd like to know is if there is a way to access the session object
>> pool directly, or should I maintain my own list of running sessions?
>
> In cases like this, we use the maintain a separate data structure. From
> my experience, the lookup of other sessions is mostly concerned about a
> certain property of the session object - not the session object as a
> whole. So it often make sense to give this property a separate name in
> the form of a type. For an example, you may take a look at the new TCP
> terminal server that comes with the Genode version 11.11. You can find
> it at:
>
>   gems/src/server/tcp_terminal/main.cc

Thanks, this worked perfectly! At first I didn't know how to start  
splitting
functionality between my object and the server session, but as soon as I
started doing it, it all came out naturally!

> * For use cases where we expect a lot of traffic, the overhead of
>   chopping the payload in tiny messages is unfortunate. For this
>   reason, the higher-level 'Terminal::Session' interface is designed
>   to use a combination of a shared-memory buffer and signaling.
>   Client and server share a dataspace that is allocated at the
>   server-side when the session is created. The server does newer
>   change the content of the dataspace except when explicitly
>   asked by the client. If a client wants to output data, it writes
>   its data to the dataspace and then informs the server to consume
>   it via a synchronous RPC call. While the RPC call is in flight,
>   the server copies-out the data and consumes it. Reading data
>   works similar. The client explicitly asks the server to copy new
>   data to the dataspace by issuing an RPC call. So the payload
>   gets transferred via shared memory but client and server work
>   synchronous.
>
>   I think, your example resembles this case, right?

Exactly. I suddenly realized that pure RPC is not intended for large data,
when I tried sending a couple of Kbs! ;)
I didn't use the Terminal::Session though, just took the parts I needed  
 from it.


So, on the whole, everything works! Thank you very much!

A.D.




More information about the users mailing list