/vtkServicesSocketsPrototype

Investigate usage of `vtkSocket` API to send and receive messages asynchronously.

Primary LanguageC++Apache License 2.0Apache-2.0

Investigate usage of vtkSocket API to send and receive messages asynchronously.

Build

$ export RXCPP_DIR=/path/to/rxcpp/source
$ export VTK_DIR=/path/to/vtk/build
$ mkdir build && cd build && cmake -GNinja -S ../ -B .
$ ninja

Run

Launch in server mode.

$ ./main -s 1234

Launch in client mode and connect to the server we created above.

$ ./main -c localhost 1234 -n20

Here, the -n argument specifies no. of remote commands to issue.

In server mode, three services are emulated: a data, render and io service that simply print the commands. A client picks a message at random and sends it to a random destination service on the server.

Sample output (server):

$ ./main -s 1234
(   0.000s) [main thread     ]               main.cxx:233   INFO| => Waiting for connection: localhost:1234

(   2.528s) [main thread     ]               main.cxx:236   INFO| => Client connected!
(   2.528s) [main thread     ]               main.cxx:187   INFO| => Registered services.data:14752253762927134915
(   2.528s) [main thread     ]               main.cxx:187   INFO| => Registered services.render:15335038379579459937
(   2.528s) [main thread     ]               main.cxx:187   INFO| => Registered services.io:15497323717503977043
(   2.528s) [main thread     ]               main.cxx:252   INFO| => Advertise service registry
(   2.539s) [services.render ]               main.cxx:170   INFO| render-4
(   2.539s) [services.io     ]               main.cxx:170   INFO| write-2
(   2.539s) [services.render ]               main.cxx:170   INFO| render-3
(   2.539s) [services.render ]               main.cxx:170   INFO| render-3
(   2.539s) [services.data   ]               main.cxx:170   INFO| object-delete
(   2.539s) [services.io     ]               main.cxx:170   INFO| read
(   2.539s) [services.render ]               main.cxx:170   INFO| render
(   2.539s) [services.data   ]               main.cxx:170   INFO| update-state
(   2.539s) [services.data   ]               main.cxx:170   INFO| object-delete
(   2.539s) [services.render ]               main.cxx:170   INFO| render-4
(   2.539s) [services.data   ]               main.cxx:170   INFO| object-delete
(   2.539s) [services.data   ]               main.cxx:170   INFO| object-delete
(   2.539s) [services.render ]               main.cxx:170   INFO| render-4
(   2.539s) [services.render ]               main.cxx:170   INFO| render
(   2.539s) [services.render ]               main.cxx:170   INFO| render-2
(   2.539s) [services.render ]               main.cxx:170   INFO| render
(   2.539s) [services.io     ]               main.cxx:170   INFO| read-2
(   2.539s) [services.data   ]               main.cxx:170   INFO| update-state
(   2.539s) [services.render ]               main.cxx:170   INFO| render-2
(   2.539s) [services.io     ]               main.cxx:170   INFO| write-2
(   3.539s) [main thread     ]               main.cxx:343   INFO| => Shutdown services
(   3.539s) [services.io     ]               main.cxx:176   INFO| exit
(   3.539s) [services.data   ]               main.cxx:176   INFO| exit
(   3.539s) [services.render ]               main.cxx:176   INFO| exit
(   3.539s) [main thread     ]               main.cxx:349   INFO| => Shutdown comm
(   3.539s) [comm.send       ]               main.cxx:96    INFO| exit
(   3.539s) [comm.recv       ]               main.cxx:141   INFO| exit
(   3.539s) [main thread     ]               main.cxx:357   INFO| Wait for client to disconnect
(   3.640s) [main thread     ]               main.cxx:361   INFO| => Shutdown server

Sample output (client):

$ ./main -c localhost 1234 -n20
(   0.000s) [main thread     ]               main.cxx:242   INFO| => Connected to localhost:1234
(   0.000s) [main thread     ]               main.cxx:265   INFO| => Receiving service registry
(   0.000s) [main thread     ]               main.cxx:279   INFO| => services.data:14752253762927134915
(   0.000s) [main thread     ]               main.cxx:279   INFO| => services.io:15497323717503977043
(   0.000s) [main thread     ]               main.cxx:279   INFO| => services.render:15335038379579459937
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render-4
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: write-2
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render-3
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render-3
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: object-delete
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: read
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: update-state
(   0.010s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: object-delete
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render-4
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: object-delete
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: object-delete
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render-4
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render-2
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: read-2
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: update-state
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: render-2
(   0.011s) [main thread     ]               main.cxx:73    INFO| => Enqueue msg: write-2
(   1.011s) [main thread     ]               main.cxx:343   INFO| => Shutdown services
(   1.011s) [main thread     ]               main.cxx:349   INFO| => Shutdown comm
(   1.011s) [comm.send       ]               main.cxx:96    INFO| exit
(   1.012s) [comm.recv       ]               main.cxx:141   INFO| exit
(   1.012s) [main thread     ]               main.cxx:364   INFO| => Shutdown client