Example 3: minimal websocket echo server
A minimal websocket echo server demo is put into the directory 'minimal-examples\ws-server\minimal-ws-server-echo'.
Create a subfolder 'minimal-ws-server-echo' below the directory 'lws-demos'. Copy such files to the path 'lws-demos\minimal-ws-server-echo': minimal-ws-server-echo.c, protocol_lws_minimal_server_echo.c, websockets.dll, libcrypto-1_1.dll, libssl-1_1.dll.
Errors will be reported if compilation is done directly. The file 'protocol_lws_minimal_server_echo.c' and 'lws-demos\include\libwebsockets\lws-protocols-plugins.h' should be modified as follows:
1. Add
#include "libwebsockets/lws-protocols-plugins.h"
to the beginning of the file 'protocol_lws_minimal_server_echo.c', just before the line #include <string.h>;
2. Add the following programming statements to the file 'lws-demos\include\libwebsockets\lws-protocols-plugins.h' in order to prevent the header file from being included multiple times.
Add to the beginning of the file:
#ifndef HEADER_LWS_PROTOCOLS_PLUGINS_H
#define HEADER_LWS_PROTOCOLS_PLUGINS_H
Add to the endo of the file:
#endif
3. Search the programming statement of #ifdef LWS_WITH_PLUGINS in the file 'lws-demos\include\libwebsockets\lws-protocols-plugins.h', and add the macro definition to the line before that statement:
#define LWS_WITH_PLUGINS
Use any text editor to create a file named by 'Makefile'. Its content is:
SRC=minimal-ws-server-echo.c protocol_lws_minimal_server_echo.c
OBJ=minimal-ws-server-echo.obj protocol_lws_minimal_server_echo.obj
PROG=minimal-ws-server-echo.exe
CFLAGS=/I "../include" /I "../openssl-1.1.1/include" /c /ZI /nologo /W3 /WX- /Od /Oy- /D "WIN32" /D "_CONSOLE" /Gm /EHsc /RTC1 /GS /fp:precise /Zc:forScope /Gd /analyze- /ERRORREPORT:QUEUE
LINKER=link.exe
LFLAGS=/LIBPATH:"../lib" /INCREMENTAL /NOLOGO "websockets.lib" "kernel32.lib" "user32.lib" "advapi32.lib" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE
$(PROG):$(OBJ)
$(LINKER) $(LFLAGS) $(OBJ) /OUT:$(PROG)
$(OBJ):$(SRC)
$(CC) $(CFLAGS) $(SRC)
clean:
del $(OBJ)
del $(PROG)
del *.idb
del *.pdb
del *.ilk
del *.exp
del *.lib
Open a command-line window, execute the following instructions:
cd/d C:\Microsoft Visual Studio 10.0\VC
vcvarsall.bat x86
cd Temp\lws-demos\minimal-ws-server-echo
nmake
The file 'minimal-ws-server-echo.exe' is created.
When you want to delete the exe file and other intermediary files for re-creation, execute the instruction:
nmake clean
Run the file 'minimal-ws-server-echo.exe' and allow it to be accessed through the Windows firewall. The minimal websocket echo server is running!
It cannot be accessed by a web browser. Next how to make a simple client is introduced. Use text editor to create a HTML file 'ws-server-test.html'. Its content is as follows:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<title>WebSocket</title>
</head>
<body>
<h1>Echo Test</h1>
<input id="sendTxt" type="text"/>
<button id="sendBtn">Send</button>
<div id="recv"></div>
<script type="text/javascript">
var WebSocket = new WebSocket("ws://localhost:7681");
WebSocket.onopen = function(){
document.getElementById("recv").innerHTML = "Websocket open!\nConnected";
}
WebSocket.onclose = function(){
document.getElementById("recv").innerHTML = "Websocket close!";
}
WebSocket.onmessage = function(e){
document.getElementById("recv").innerHTML = e.data;
}
document.getElementById("sendBtn").onclick = function(){
var txt = document.getElementById("sendTxt").value;
WebSocket.send(txt);
}
</script>
</body>
</html>
Use a web browser to open 'ws-server-test.html', the web page is shown as follows:
Input 'Hello, world!' in the input box, then click the 'send' button. The input will be shown below the text box:
The websocket server will echo back whatever it receives.