Could you share your client and server's code?
Bjoern
Am 08.05.2014 21:02, schrieb Yuxin Ren:
Year, I did those thing. Each server tread has its own server obj and register server instance, and it calls register_obj() and server.loop() on their own. But this does not work. And actually the master thread in server always receives all requests. When I let the master thread to spin, the server cannot receive any request, even though other threads in server block on the server.loop() function. I am really confused about it.
Thank you.
On Thu, May 8, 2014 at 12:22 PM, Björn Döbel doebel@os.inf.tu-dresden.dewrote:
Am Do 08 Mai 2014 18:17:54 CEST schrieb Yuxin Ren:
HiThank you very much for your reply.I did what you said, but the
behavior is very confusing.I create two channels in lua script, and correspond each channel to a pair of client and server threads.
In the server side, each thread registers its own server obj to its
own Registry_server, and of course they have different dispatch functions.Now the result is only one server thread receive all requests from client, and it selects different dispatch function to run based on the request.
But I want different threads to run different dispatch function, not
only one server thread process all requests using different dispatch functions.Do you have any ideas about this?Thank you.
On Thu, May 8, 2014 at 2:07 AM, Björn Döbel doebel@os.inf.tu-dresden.de
wrote:
********* *ANFANG des verschlüsselten oder unterschriebenen Bereichs*
Hi,
On 08.05.2014 03:29, Yuxin Ren wrote:
I have one client and one server talking to each other, and both of them have 2 threads. I want thread 1 in client only talk to thread 1 in server, and thread 2 in client only talk to thread 2 in server. How can I achieve this?
The simple client/server example (http://wiki.tudos.org/L4Re_simple_client_server_example) shows how to connect a single thread in each process (or task in L4 speak). You could extend this example to create two channels in the Lua setup file, pass both channels to the tasks during startup and then let each thread use one of them for communication with its counterpart.
Note that does not completely enforce your requirement that each thread can only talk to exactly one other. Capabilities (e.g., for the communication channels) are shared per task and technically each thread could therefore send messages on each channel. If you want strict isolation, you have to separate the threads into separate tasks.
Bjoern
********* *ENDE des verschlüsselten oder unterschriebenen Bereichs*
l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
Quick guess: your separate threads need to call the register_obj() function and the server.loop() functions on their own. (You also need two independent instances of the Server_object.)
Bjoern
Thanks a lot. I solved this problem finally. Instead of using register server, each thread creates a ipc_gate and manually binds itself to that ipc_gete. It works well now.
On Thu, May 8, 2014 at 3:03 PM, Björn Döbel doebel@os.inf.tu-dresden.dewrote:
Could you share your client and server's code?
Bjoern
Am 08.05.2014 21:02, schrieb Yuxin Ren:
Year, I did those thing. Each server tread has its own server obj and register server instance, and it calls register_obj() and server.loop() on their
own.
But this does not work. And actually the master thread in server always receives all requests. When I let the master thread to spin, the server cannot receive any request, even though other threads in server block on the server.loop() function. I am really confused about it.
Thank you.
On Thu, May 8, 2014 at 12:22 PM, Björn Döbel <
doebel@os.inf.tu-dresden.de>wrote:
Am Do 08 Mai 2014 18:17:54 CEST schrieb Yuxin Ren:
HiThank you very much for your reply.I did what you said, but the
behavior is very confusing.I create two channels in lua script, and correspond each channel to a pair of client and server threads.
In the server side, each thread registers its own server obj to its
own Registry_server, and of course they have different dispatch functions.Now the result is only one server thread receive all requests from client, and it selects different dispatch function to run based on
the
request.
But I want different threads to run different dispatch function, not
only one server thread process all requests using different dispatch functions.Do you have any ideas about this?Thank you.
On Thu, May 8, 2014 at 2:07 AM, Björn Döbel <
doebel@os.inf.tu-dresden.de>
wrote:
********* *ANFANG des verschlüsselten oder unterschriebenen Bereichs*
Hi,
On 08.05.2014 03:29, Yuxin Ren wrote:
I have one client and one server talking to each other, and both of them have 2 threads. I want thread 1 in client only talk to thread 1 in server, and thread 2 in client only talk to thread 2 in server. How can I achieve this?
The simple client/server example (http://wiki.tudos.org/L4Re_simple_client_server_example) shows how
to
connect a single thread in each process (or task in L4 speak). You could extend this example to create two channels in the Lua setup file, pass both channels to the tasks during startup and then let each thread use one of them for communication with its counterpart.
Note that does not completely enforce your requirement that each thread can only talk to exactly one other. Capabilities (e.g., for the communication channels) are shared per task and technically each thread could therefore send messages on each channel. If you want strict isolation, you have to separate the threads into separate
tasks.
Bjoern
********* *ENDE des verschlüsselten oder unterschriebenen Bereichs*
l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
Quick guess: your separate threads need to call the register_obj() function and the server.loop() functions on their own. (You also need two independent instances of the Server_object.)
Bjoern
l4-hackers mailing list l4-hackers@os.inf.tu-dresden.de http://os.inf.tu-dresden.de/mailman/listinfo/l4-hackers
l4-hackers@os.inf.tu-dresden.de