11. Services & Interfaces
How the outside world talks to a Psyclone system: services process external requests, interfaces bind them to network ports and protocols.
The model
Two elements cooperate to expose a Psyclone system on the network:
- A service is the thing that handles external requests — PsyProbe's web handler and the console are services.
- An interface is a network listener — a port with a protocol (
HTTP,Telnet,Message,RAW; TCP by default, UDP withip="UDP") — that forwards connections to a service.
Several interfaces can share one port: the protocol is auto-detected from the first bytes of a connection, and if nothing is detected within the timeout, the default="yes" interface is assumed.
Built-in services
Unless disabled, every system implicitly gets PsyProbe and the console, as if the spec contained:
<service name="PsyProbe" root="../html" />
<service name="Console" />
<interface name="PsyProbe" protocol="HTTP" service="PsyProbe" />
<interface name="Console" protocol="Telnet" service="Console" />
Disable either by pointing the protocol at no service:
<interface protocol="HTTP" service="none" />
<interface protocol="Telnet" service="none" />
Custom services
A custom service is declared like a small module: its triggers/posts bridge external requests into the pub/sub bus, and an interface binds it to a port. A web service:
<service name="MyWebService">
<trigger type="Data.Web.Reply" from="wb" />
<post type="Data.Web" to="wb" />
</service>
<interface name="MyWebInterface" port="6789" protocol="HTTP" service="MyWebService" />
An incoming HTTP request becomes a Data.Web message; whichever component posts the matching Data.Web.Reply supplies the response. The same pattern works with protocol="Telnet" for line-based consoles, and with protocol="Message" for full DataMessage exchange with a remote CMSDK-linked program (a trigger-only variant keeps the incoming message types; adding a post rewrites types before posting).
Protocol auto-detection on a shared port
Multiple interfaces can listen on the same port; each connection is sniffed and routed:
<interface name="MyWebInterface" node="Node0" port="1234" protocol="HTTP"
service="MyWebService" timeout="3000" default="yes" />
<interface name="MyTelnet" port="1234" protocol="Telnet" service="MyTelnetService" />
<interface name="MyMsgLink" port="1234" protocol="Message" service="MyMsgService" />
After 3 seconds with no recognisable protocol, the default (here HTTP) interface takes the connection. Interface attributes: name (required), service (required), port (required), node, protocol, timeout, default, plus the SSL verification attributes allowselfsigned / cafile / capath (see the reference).
How clients connect
- Browsers — hit the main port (default 10000) or a dedicated PsyProbe/HTTP interface:
http://hostname:10000/. - Terminals — telnet to a Telnet interface for the console service.
- Programs — link CMSDK and connect to a
Messageinterface to exchange DataMessages, or run as an external-space component for full module semantics.
<authentication> element (currently a parse-only stub) — lives in the System Guide.