Linux C++ 服务器端这条线怎么走?一年半能做出什么?

148 篇文章 3 订阅
120 篇文章 1 订阅

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」,

点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!我刚开始学习C++也看了很多前辈的经验分享,受益匪浅。有索取也要有回馈,现在也来分享自己的学习经验,抛砖引玉,若能给后来的同学一点点帮助也好。

我从事的的C++后台开发的工作,写这篇文章,分享自己的 C++ 后台开发学习路径,以及点过的技能树,希望能给想从事后台开发的同学一点参考,若能帮你少走些弯路就更好

现在回归正题,工欲善其事必先利其器,好的书籍能让学习事半功倍,所以每个技能点之后我会推荐一些书,都是我读过且口碑不错的书,供参考。

分享的是我的学习路径,如果你也能顺着这个学习路径认真学一遍,我想在后台开发技术上你已经有一个很不错的技术积累,加上项目练习通过大部分大厂面试是没有问题的。

计算机基础综合

考过CS或者软件工程研究生的同学可能对这个标题不陌生,是的,我说的就是专业课代号408的计算机基础综合。这门专业课包含:数据结构、计算机组成原理、计算机网路、操作系统。

为什么提起这门课程呢,因为基础知识太重要了!这是科班区别于培训班的最大不同,理论知识不一定马上能用于项目上,但当与人讨论起某个技术问题时你能够知道它深层次的原因,看问题的角度会更加全面和系统。

打个比方,你可能听过堆栈的名词,但知道它的具体结构和不同吗?学完数据结构就明白了;你知道计算机会算加减乘除,但具体是如何实现的呢?组成原理会告诉你;知道程序执行的时候怎么区分指令地址和数据地址的吗?操作系统会告诉你答案。

所以如果你大学不是计算机相关专业,或者是本专业但是没有完全吃透基础的话,强烈建议你务必抽时间好好学习这几门课程。ee483937072f325d0fc10337ccafa225.jpeg

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在Linux C++中实现WebSocket服务器端转发行情数据,可以使用以下步骤: 1. 使用第三方C++库,如libwebsockets或uWebSockets等,来实现WebSocket服务器端。 2. 在服务器端编写代码,以便将行情数据发送到WebSocket客户端。可以使用网络库,如boost::asio或ACE等,来管理网络连接和数据传输。 3. 在WebSocket服务器端中,使用JSON格式将行情数据打包并发送给客户端。可以使用第三方JSON库,如RapidJSON或nlohmann/json等。 4. 为了便于管理和扩展,可以将WebSocket服务器端和行情数据转发逻辑分离到不同的模块中。 下面是一个简单的示例代码,展示如何使用libwebsockets库实现WebSocket服务器端转发行情数据: ```c++ #include <libwebsockets.h> #include <iostream> #include <string> #include <vector> using namespace std; // 行情数据结构体 struct Quote { string symbol; double price; }; // 行情数据源 class QuoteSource { public: void addQuote(const Quote& quote) { quotes.push_back(quote); } const vector<Quote>& getQuotes() const { return quotes; } private: vector<Quote> quotes; }; // WebSocket服务器端 class WebSocketServer { public: WebSocketServer(int port) : port(port), context(NULL), listen_socket(NULL), quote_source(NULL) {} ~WebSocketServer() { if (listen_socket) { libwebsocket_close_and_free_session(context, listen_socket, LWS_CLOSE_STATUS_GOINGAWAY); } if (context) { libwebsocket_context_destroy(context); } } void setQuoteSource(QuoteSource* qs) { quote_source = qs; } bool start() { // 创建WebSocket协议上下文 struct libwebsocket_protocols protocols[] = { { "http-only", callback_http, 0 }, { "quote", callback_quote, sizeof(struct Quote) }, { NULL, NULL, 0 } }; struct libwebsocket_context_creation_info info = { .port = port, .protocols = protocols, .gid = -1, .uid = -1 }; context = libwebsocket_create_context(&info); if (!context) { cerr << "Failed to create WebSocket context" << endl; return false; } // 监听WebSocket连接 listen_socket = libwebsocket_create_server(context, 0, protocols, NULL, NULL, NULL, NULL, -1, -1); if (!listen_socket) { cerr << "Failed to create WebSocket server" << endl; libwebsocket_context_destroy(context); return false; } cout << "WebSocket server started on port " << port << endl; return true; } private: // HTTP回调函数 static int callback_http(struct libwebsocket_context* context, struct libwebsocket* wsi, enum libwebsocket_callback_reasons reason, void* user, void* in, size_t len) { return 0; } // 行情数据回调函数 static int callback_quote(struct libwebsocket_context* context, struct libwebsocket* wsi, enum libwebsocket_callback_reasons reason, void* user, void* in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED: // 新客户端连接 cout << "WebSocket client connected" << endl; break; case LWS_CALLBACK_SERVER_WRITEABLE: // 发送行情数据到客户端 if (quote_source) { const vector<Quote>& quotes = quote_source->getQuotes(); for (size_t i = 0; i < quotes.size(); ++i) { libwebsocket_write(wsi, (unsigned char*)&quotes[i], sizeof(Quote), LWS_WRITE_BINARY); } } break; case LWS_CALLBACK_CLOSED: // 客户端断开连接 cout << "WebSocket client disconnected" << endl; break; default: break; } return 0; } private: int port; struct libwebsocket_context* context; struct libwebsocket* listen_socket; QuoteSource* quote_source; }; int main() { // 创建WebSocket服务器 WebSocketServer server(8080); // 创建行情数据源 QuoteSource quote_source; // 添加行情数据 quote_source.addQuote({ "AAPL", 123.45 }); quote_source.addQuote({ "GOOGL", 234.56 }); // 设置行情数据源 server.setQuoteSource(&quote_source); // 启动WebSocket服务器 if (!server.start()) { return 1; } // 运行事件循环 while (true) { libwebsocket_service(server.getContext(), 50); } return 0; } ``` 在上面的示例代码中,我们使用libwebsockets库创建了一个WebSocket服务器,并且在服务器端实现了一个行情数据源。在行情数据源中,我们添加了两个行情数据(AAPL和GOOGL),然后将行情数据源设置为WebSocket服务器的属性。在回调函数中,我们使用libwebsocket_write函数将行情数据发送到WebSocket客户端。 当我们运行这个示例程序时,它将启动一个WebSocket服务器,监听8080端口。如果我们使用浏览器或其他WebSocket客户端连接到这个服务器,它将发送行情数据到客户端。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机一哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值