C ++ Websocket服务器启动的数据

时间:2017-01-23 16:40:05

标签: c++ linux websocket server

我需要在Linux上运行的C ++代码上实现websocket服务器。 有时,我还需要将数据异步推送到客户端。

到目前为止,我已经尝试过野兽echo服务器,libwebsocket测试服务器和 libonion(一旦尝试从浏览器连接错误,它就会崩溃 “如果没有编译gnutls,则无法计算SHA1!现在正在中止”。但是,我无法想出任何我可以建立的东西。

下面我试图通过虚拟测试类提供更多信息。

test.cpp
class test
{
public:
void processDataFromClient(const string & data);//this needs to get filled by websocket read method? how?
void pushDataToClient(const string & data);

};
test::pushDataToClient(const string & data)
{
(socketId, text) // how do I call this from my test.cpp ?
}

test::void processDataFromClient(const string & data)
{
//do some computation based on the text received
//turn on the light
//once Light is on for a minute call
pushDataToClient( lighton) ;
}

//websocket_server.cpp 
main
{
//open a webSocket
//listen for messages from client i.e pass data received from onion_websocket_read to test class by calling processDataFromClient();
//send asynchronous messages to client received from test class. i.e. pushDataToClient should invoke onion_websocket_write //do we need a thread for this ? how to achieve this?

}

我正在寻找一个简单的界面,它允许我启动websocket,异步接收和发送数据到客户端。

2 个答案:

答案 0 :(得分:0)

  

我需要在Linux上运行的C ++代码上实现服务器   支持Angular JS客户端。有哪些选择?我可以吗   使用c ++实现服务器over raw socket,boost-asio server,CGI   基于服务器支持,REST服务器还是更好/更快   选项。我以前从未实现过这个并且没有意识到这一点   每个选项的缺点/优点。我从未编写过CGI和   REST api之前。让我知道你的意见。

也许我误解了你的问题,但你是在谈论用C ++重写某种基于套接字的Apache(或nodejs)吗? AngularJS是一个在浏览器中运行的框架。当你说"支持Angular JS客户端时,"你的意思是用C ++提供基于HTML / HTTP的应用程序?这将包含其他框架和基于JavaScript的实现。

如果这是要求,我不会从头开始做。这是一项艰巨的任务。有些项目可供您使用和构建。

这里有几个参考文献:

https://softwareengineering.stackexchange.com/questions/53624/can-c-be-used-as-a-server-side-web-development-language How to use C++ for apache server

编辑:基于以下评论,或许这些解决方案之一?它们是使您能够从Node / Apache调用C ++程序的模块:

How can I use a C++ library from node.js?
Forwarding apache request to a c++ program

答案 1 :(得分:0)

您首先需要深入了解 <{em> HTTPWebSockets 以及两者之间的关系。花两周时间研究两者。您可能还需要了解HTML5&amp; JavaScript&amp; AJAX

(所以你可能需要花费几个来了解所有这些主题;你可以找到几本与它们相关的书籍和网站。)

更好地使用一些C和C ++ HTTP服务器库,同时提供WebSocket支持。像例如libonion(也许Wt,但我不确定它是否支持WebSockets。)。 libonion有一个example for websocket(当然你需要一个非常近期的快照)。

花了一些时间(可能几个月,几天还不够)来理解 HTTP&amp; WebSockets你可能会意识到你应该实现一个C ++服务器程序来处理两者 HTTP&amp; WebSockets的。只是简单地拥有一个C ++程序并且只执行WebSockets而不处理HTTP-可能毫无意义,当然也没用。但是,C ++中专门的HTTP + WebSocket服务器程序可以从通用Web服务器转发一些请求(请参阅proxy servers)。

另请参阅Comparison of WebSockets implementations wikipage。