blob: f9c731208f5880c62044bc051193953315f84875 [file] [log] [blame]
.. _civetweb-websocket-server-sample:
Civetweb WebSocket Server sample
################################
Overview
********
This sample application uses the HTTP APIs provided by the external
`Civetweb <https://github.com/civetweb/civetweb>`_ module to create an WebSocket
server demonstrating selected Civetweb features.
The Civetweb module is available as a west :ref:`module <modules>`.
The source code for this sample application can be found at:
:zephyr_file:`samples/net/civetweb/websocket_server`.
Requirements
************
- A board with hardware networking
- The Civetweb module (made available via west)
Building and Running
********************
This sample was tested on the NUCLEO H745ZI-Q board, so this is the recommended target.
Build it with:
.. zephyr-app-commands::
:zephyr-app: samples/net/civetweb/websocket_server
:board: nucleo_h745zi_q_m7
:goals: build
:compact:
The sample application uses a static IP configuration.
After flashing the board, the server can be accessed with the web browser
of your choice (preferably Chrome) under ``192.0.2.1`` IPv4 address.
The IP address can be changed in :zephyr_file:`samples/net/civetweb/websocket_server/prj.conf`
The port number can be changed in :zephyr_file:`samples/net/civetweb/websocket_server/main.c`
This sample application consists of two main parts:
- **HTTP Server** - ``http://192.0.2.1:8080`` or ``http://192.0.2.1:8080/index.html`` It is needed to serve application's main page and its dependencies.
- **WebSocket Server** - ``ws://192.0.2.1:8080/ws``. It is an echo server, which sends received data enclosed in **board name** and a string **too!** back.
The **HTTP Server*** serves following statically allocated files
(*no file system is present*):
- ``/`` - main application page (redirects requests to ``/index.html``)
- ``/index.html`` - main application page
- ``/index.css`` - main application page style sheet
- ``/ws.js`` - WebSocket client JavaScript
A regular 404 status code is returned when trying to access other links.
The **WebSocket Server** works as follows:
Calling the ``http://192.0.2.1:8080`` in your browser provides WebSocket
client JavaScript load. This script establishes the connection to the WebSocket
server running on your board.
Putting some message in ```Message Text``` window and pressing *Send* button generates
predefined answer from WebSocket server printed in log window.