【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
用图形界面库做开发,还有一部分同学是用来做游戏的。特别是网络游戏,基本上就是很多的客户端在一个服务器上面进行交流互通。大家最有直观感受的,应该就是各种棋牌类游戏,这类游戏需要很多的人,在一个平台上面互动。如果是工业应用,大家就想象成有很多的传感器需要上传数据到服务器,而我们的图形应用也是这个服务器的一个客户端而已。所以大家在掌握了图形库的开发之后,最好也能够学一下基本的网络开发,这样对自己的发展大有裨益。

1、网络服务器
现在的公司,大部分都是去租云服务,很少自己去机房搭建的。这么做的好处,就是按需进行布置。如果使用的人比较多,就多租一点服务器;使用的人少,就少用一点。
2、操作系统
服务器的操作系统大部分都是linux,以centos和ubuntu为主。少部分是windows server系统,如果自己实在是不太熟悉linux系统,使用windows server也是可以的。
3、网络开源库
网络关于tcp/ip的开源库很多,这里谈的主要是面向c/c++语言的开发库。和easyx一样,直接用posix api写网络程序也可以,就是麻烦一点。所以大家一般都是习惯用第三方网络库来进行开发,自己专注于业务即可。目前来说,有这么几个网络库用的比较多,一个是libevent,这个历史比较悠久。一个是skynet,云风开发的,大家如果不喜欢lua,也可以直接用c开发。还有一个就是今天说的muduo。
4、muduo开发库
大部分通信库都是用回调的形式进行开发的。也就是说,主要的通信流程,都被作者在后台隐藏好了。我们要做的,就是注册好自己的回调函数,在后台ok的时候,比如connect连接上,有数据被接收到的时候,都会调用我们自己的回调函数。mudo库也是如此,
https://github.com/chenshuo/muduo/tree/master
5、muduo的echo服务器举例
对于这些库,一开始没有必要追究细节,会用即可,特别是知道自己的函数什么时候回调的就行。比如下面这个demo,里面最重要的变量就是server_变量,最重要的函数就是onConnection和onMesaage函数,
#include <muduo/net/TcpServer.h>
#include <muduo/net/Endian.h>
#include <muduo/net/InetAddress.h>
#include <muduo/net/EventLoop.h>
#include <muduo/net/TcpConnection.h>
#include <muduo/base/Logging.h>
using namespace muduo;
using namespace muduo::net;
class EchoServer
{
public:
EchoServer(EventLoop* loop, const InetAddress& listenAddr)
: server_(loop, listenAddr, "EchoServer")
{
server_.setConnectionCallback(
std::bind(&EchoServer::onConnection, this, std::placeholders::_1));
server_.setMessageCallback(
std::bind(&EchoServer::onMessage, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
}
void start()
{
server_.start();
}
private:
void onConnection(const TcpConnectionPtr& conn)
{
if (conn->connected())
{
LOG_INFO << "New connection: " << conn->peerAddress().toIpPort();
}
else
{
LOG_INFO << "Connection closed: " << conn->peerAddress().toIpPort();
}
}
void onMessage(const TcpConnectionPtr& conn, Buffer* buf, Timestamp time)
{
std::string msg = buf->retrieveAllAsString();
LOG_INFO << "Received message: " << msg;
conn->send(msg); // Echo back the received message
}
TcpServer server_;
};
int main()
{
EventLoop loop;
InetAddress listenAddr(2023); // Echo server listens on port 2023
EchoServer server(&loop, listenAddr);
server.start();
loop.loop();
return 0;
}
6、编译方法
编译的话,可以自己去网上先下载muduo,生成muduo_base和muduo_net两个静态库之后,直接用下面命令链接测试即可,
g++ -std=c++11 -o echo_server echo_server.cpp -lmuduo_net -lmuduo_base -pthread -I3rdparty/ -Llib/
7、测试方法
echo服务器可以直接用telnet工具测试。如果是同一台电脑或者板子,可以直接telnet 127.0.0.1 2023,这样我们发送什么字符,对方就回什么字符。没有telnet工具,使用mobaxterm也可以,上面集成了telnet工具。

8、用这个程序作为跳板,去发展自己的应用
**我们从最简单的程序开始学习,但是最终目的还是为了开发产品。直接改这个echo程序,慢慢为自己所用。**比如这个程序,是不是简单改一下,就是file服务器。或者客户端比较多,可以是聊天服务器,或者是游戏服务器。甚至加上rtsp&h264内容,还可以是远程协同服务器、视频服务器。所以库只是基础,能做什么取决于我们自己。
比如github上有很多的开源网络代码,下面就是一个基于rtsp的视频传输协议代码,有兴趣的同学可以好好看下,
https://github.com/PHZ76/RtspServer/tree/master
或者是,
https://github.com/ouweibin/RtspServer