项目地址在:https://gitlab.com/eidheim/Simple-Web-Server
我调试通过的代码如下:
cpp
#include "server_ws.hpp"
using namespace std;
using WsServer = SimpleWeb::SocketServer<SimpleWeb::WS>;
void run_simple_socket_server(unsigned short port)
{
WsServer server;
server.config.port = port;
auto &echo = server.endpoint["^/echo/?$"];
echo.on_message = [](shared_ptr<WsServer::Connection> connection, shared_ptr<WsServer::Message> message)
{
auto message_str = message->string();
cout << "Server: Message received: \"" << message_str << "\" from " << connection.get() << endl;
cout << "Server: Sending message \"" << message_str << "\" to " << connection.get() << endl;
auto send_stream = make_shared<WsServer::SendStream>();
*send_stream << message_str;
connection->send(send_stream, [](const SimpleWeb::error_code &ec)
{
if (ec) {
cout << "Server: Error sending message. " <<
"Error: " << ec << ", error message: " << ec.message() << endl;
} });
};
echo.on_open = [](shared_ptr<WsServer::Connection> connection)
{
cout << "Server: Opened connection " << connection.get() << endl;
};
echo.on_close = [](shared_ptr<WsServer::Connection> connection, int status, const string & /*reason*/)
{
cout << "Server: Closed connection " << connection.get() << " with status code " << status << endl;
};
echo.on_error = [](shared_ptr<WsServer::Connection> connection, const SimpleWeb::error_code &ec)
{
cout << "Server: Error in connection " << connection.get() << ". "
<< "Error: " << ec << ", error message: " << ec.message() << endl;
};
thread server_thread([&server]()
{ server.start(); });
server_thread.join();
}
int main(int argc, char const *argv[])
{
unsigned short port = 10088;
cout << "Server port: " << port << endl;
run_simple_socket_server(port);
return 0;
}
Makefile如下:
bash
.PHONY : clean
ROOTDIR = ../..
INCLUDE = -I../$(ROOTDIR)/lib/inc -I$(ROOTDIR)/public -I$(ROOTDIR)/public/simple_websocket_server
LDLIBS = -lpthread -lssl -lcrypto -lboost_system
runlibs = -Wl,-rpath=/web/lib
dst = arm
ifeq ($(dst),arm)
CXX = aarch64-linux-gnu-g++ --std=c++11
LDLIBS += -L../$(ROOTDIR)/lib/so.aarch64
else
CXX = g++ --std=c++11
LDLIBS += -L../$(ROOTDIR)/lib/so.x86_64
endif
bin = ../../bin/simple_websocket
src = $(wildcard *.cpp)
obj = $(patsubst %.cpp,%.o, $(src))
$(bin) : $(obj)
$(CXX) $(runlibs) $^ -o $@ $(LDLIBS)
$(obj): %.o : %.cpp
$(CXX) -g -c $(INCLUDE) $< -o $@
clean :
rm -f $(obj) $(bin)