EXAMPLES
PingPong
1) Description
The PingPong example allows the measurement of roundtrip duration when sending and receiving
back a single message.
2) Design
It consists of 2 units :
- pong : Waits for messages from ping and sends the same message back
- ping : Sends a message to pong and waits for it's return
3) Scenario
A message is sent by the ping executable on the "PING" partition, which the pong executable is waiting for.
The pong executable sends the same message back on the "PONG" partition, which
the ping executable is waiting for. This sequence is repeated a configurable number of times.
The ping executable measures:
- write_access-time: time the write() method took.
- read_access-time: time the take() method took.
- round_trip-time: time between the call to the write() method
and the return of the take() method.
- ping also calculates min/max/average statistics on these values over configurable
data blocks.
Configurable:
- blocks: number of roundtrips in each statistics calculation
- nof_cycles: how many times such a statistics calculation is run
- topic_id: for the topic, there's a choice between several preconfigured topics.
- write_partition: the partition for writing.
- read_partition: the partition that all samples are read from.
topic_id allows selection of topic used for the test, among those defined by pragma keylist in pinpong.idl, and may be one of :
- 'm' (PP_min_msg)
- 'q' (PP_seq_msg)
- 's' (PP_string_msg)
- 'f' (PP_fixed_msg)
- 'a' (PP_array_msg)
- 't' (PP_quit_msg)
- 'b' (PP_bounded_seq_msg) is also available when running the C++ version of PingPong on posix platforms
PING and PONG partition: this enables to use several PING-PONG pairs
simultaneous with them interfering with each other. It also enables
creating larger loops, by chaining several PONG tests to one PING test.
Running of examples in Standalone Mode
Running the examples in a Posix environment
Environment Setup
Let's call OpenSplice_install_dir the OpenSplice installation directory.
The OpenSplice environment variables must be set in order for the examples to build/run correctly.
To do this, open a terminal and source the "OpenSplice_install_dir/release.com" script supplied with the distribution.
C and C++ Executables
Building the examples is described on the Summary page
Two executables and a library are generated in the standalone directory when the example is built:
For C++
- ping
- pong
- libsacpp_pingpong_types.so
For C
- ping
- pong
- libsac_pingpong_types.so
Java executables
Building the examples is described on the Summary page
Three jars are generated in the java/standalone directory when the example is built:
For Java
- saj_pingpong_ping.jar
- saj_pingpong_pong.jar
- saj_pingpong_types.jar
For Java5
- java5_ping.jar
- java5_pong.jar
Running the example
Ensure that the environment for OpenSplice is set up correctly as described above for each new terminal used.
It is recommended that you run the subscriber and publisher in separate terminals to avoid mixing the output
Running in single process (heap memory) configuration : the application starts OpenSplice middleware
- OpenSplice is deployed in this mode by default.
- The OpenSplice daemon should not be started manually. Instead the OpenSplice middleware and optional services are implicitly started by the single process applications as required
- Open 2 terminals. Set up the environment and go to the example directory as described above
Running in multiple process shared memory configuration
To enable deployment in this mode, an OpenSplice configuration file must be selected that has shared memory support e.g. one of the ospl_shmem xml configuration files found in the OpenSplice_install_dir/etc/config directory.
- Open 2 terminals. In each terminal:
- Setup the environment and go to the example directory as described above
- Set the required configuraton file e.g. OSPL_URI=file://$OSPL_HOME/etc/config/ospl_shmem_ddsi.xml
- Start the OpenSplice daemon. You can do this by typing ospl start
Starting ping and pong
- In the first terminal start pong by running either
- pong PongRead PongWrite for C/C++
- java -jar saj_pingpong_pong.jar PongRead PongWrite for Java
- java -jar pong/java5_pong.jar PongRead PongWrite for Java5
pong usage: pong [write_partition] [read_partition]
- In the second terminal start ping by running either
- ping 100 100 f PongRead PongWrite for C/C++
- java -jar saj_pingpong_ping.jar 100 100 f PongRead PongWrite for Java
- java -jar ping/java5_ping.jar 100 100 f PongRead PongWrite for Java5
ping usage:
ping [blocks][nof_cycles] [topic_id] [write_partition] [read_partition]
topic_id is from 'm', 'q', 's', 'f', 'a' or 't' where 't' is to quit
Running C/C++/C#/Java examples on Windows
Environment Setup
Let's call OpenSplice_install_dir the OpenSplice installation directory.
The OpenSplice environment variables must be set in order for the examples to run correctly.
To do this open an OpenSplice Command Prompt which will set up the environment variables for OpenSplice automatically. The OpenSplice Command Prompt can be selected from the start menu. Alternatively, open a windows Command Prompt and execute the "OpenSplice_install_dir\release.bat" batch script supplied with the distribution.
C/C++/C# Executables
Building the examples is described on the Summary page
Two executables are generated in the standalone directory when the example is built:
For C and C++
For C#
- sacs_pingpong_ping
- sacs_pingpong_pong
Java Executables
Building the examples is described on the Summary page
Three jars are generated in the java/standalone directory when the example is built:
For Java
- saj_pingpong_ping.jar
- saj_pingpong_pong.jar
- saj_pingpong_types.jar
For Java5
- java5_ping.jar
- java5_pong.jar
Running the C/C++/C#/Java Examples
Ensure that the environment for OpenSplice is set up correctly as described above for each new command prompt used.
The following steps describe how to run the examples:
Running in single process (heap memory) configuration : the application starts OpenSplice middleware
- OpenSplice is deployed in this mode by default.
- The OpenSplice daemon should not be started manually. Instead the OpenSplice middleware and optional services are implicitly started by the single process applications as required
- Open 2 OpenSplice Command Prompts and go to the example directory as described above
Running in multiple process shared memory configuration
To enable deployment in this mode, an OpenSplice configuration file must be selected that has shared memory support e.g. one of the ospl_shmem xml configuration files found in the OpenSplice_install_dir\etc\config directory.
- Open 2 OpenSplice Command Prompts. In each window:
- Go to the example directory as described above
- Set the required configuration file e.g. set OSPL_URI=file://%OSPL_HOME%\etc\config\ospl_shmem_ddsi.xml
- Start the OpenSplice daemon. You can do this by typing ospl start
- In the first terminal start pong by running either
- pong PongRead PongWrite for C/C++
- sacs_pingpong_pong PongRead PongWrite for C#
- java -jar saj_pingpong_pong.jar PongRead PongWrite for Java
- java -jar pong/java5_pong.jar PongRead PongWrite for Java5
pong usage: pong [write partition] [read partition]
- In the second terminal start ping by running either
- ping 100 100 f PongRead PongWrite for C/C++
- sacs_pingpong_ping 100 100 f PongRead PongWrite for C#
- java -jar saj_pingpong_ping.jar 100 100 f PongRead PongWrite for Java
- java -jar ping/java5_ping.jar 100 100 f PongRead PongWrite for Java5
ping usage:
ping [blocks][number of cycles] [topic_id] [write partition] [read partition]
topic_id is from 'm', 'q', 's', 'f', 'a' or 't' where 't' is to quit
Running in CORBA Cohabitation Mode
Doing the substitution and additional set up described below, everything previously said for Standalone Mode can be applied to CORBA Cohabitation Mode.
Environment Setup
Besides OpenSplice environment variables, we need to set
- C/C++
- The TAO environment variable TAO_ROOT to point to the Tao installation directory.
- Java
- The JacORB environment variable JACORB_HOME to point to the JacORB installation directory.
Substitution
- standalone is replaced by corba
- the java command is java -Djava.endorsed.dirs=$JACORB_HOME/lib/endorsed -classpath $OSPL_HOME/jar/dcpssaj.jar:classes