使用muduo库编写回射服务器echo

muduo是一任一某一由于事变驾驶的非闭塞电力网库,C 与Boost库的编辑。

(一)应用muduo编辑echo回射检修

在GITHUB上下载muduo源码,应用内心里使完整编辑,看赌博,您可以设置调试版本或公布版本吗?,指派出示按某路线发送:默许是假释,出示的库和头发送成为${HOME}/build/release-install所含之物下,由于muduo是定态关联的C++书斋,于是,在应用时需求指派头发送所含之物。,和库发送所含之物,并关联有重大意义的的定态库发送-lmuduo_net -lmuduo_base)。

人们熟识做出反应检修效能。,普通措施是:

1.找到套接字 socket
2。绑定接口 bind
三。监控插座 listen
4。闭塞可得到客户端衔接 accept
5。衔接设置承受反复,闭塞可得到客户端音讯 recv
6。向客户端发送音讯音讯 write

由于事变的无闭塞电力网设计,它是编辑高功能接着发生电力网服务的主流模型。,这样的事物,人们必要的率先使改变方向是你这么说的嘛!措施的思绪。:把原始的的迅速的叫来ReCV接纳记载,迅速的叫来承受来接纳衔接,迅速的叫来发送记载,换上衣服对齐记载搜集回调,电力网库接纳记载给我喊叫,指示方向给我记载,为我消耗;对齐接纳衔接的回调,电力网库承受新衔接并回调我。,供我应用;当您需求发送记载时,只写信衔接,电力网库谨慎的发送未闭塞。”

多少应用EPOLL轮询,多少应用线池来分派交给某人和对立的事物细目,视力源代码后朝外默想。率先学会应用muduo库编辑一任一某一回射检修echo顺序。

指示方向写信回信汇数

#include #include #include #include #include usingnamespace muduo;
usingnamespace muduo::net;

void onConnection(const TcpConnectionPtr 康恩)
{
    LOG_INFO << "EchoServer - " << conn->peerAddress().toIpPort() << " -> "
    << conn->localAddress().toIpPort() << " is "
    << (conn->connected() ? "UP" : "DOWN");
}

void 在音讯中const TcpConnectionPtr &conn,
    Buffer *buf,
    Timestamp 工夫)
{
    muduo::string msg(buf->retrieveAllAsString());
    LOG_INFO << conn->name() << " echo " << () << " bytes, "
    << "data received at " << ();
    conn->发送(MSG)
}

int main(int argc, constchar *argv[])
{
    EventLoop loop;
    输入地址 addr("", 1024);
    TcpServer 检修(和圈), addr, "echo");
    (&onConnection);
    OnMeN音讯)
    ();
    ();
    return0;
}

面容目的的思惟

替代的方式是将回信汇数的表示写信结构零件有或起作用中。,书中赠送的例如次:

#ifndef __ECHOSERVER_H__#define __ECHOSERVER_H__#include class EchoServer
{
    public:
        EchoServer(muduo::net::EventLoop* loop,
            const muduo::net::输入地址& listenAddr);void start();  private:
        void onConnection(const muduo::net::TcpConnectionPtr& 康恩)

        void 在音讯中const muduo::net::TcpConnectionPtr& conn,
            muduo::net::Buffer* buf,
            muduo::Timestamp 工夫);

        muduo::net::TcpServer server_;
};

#endif
#include ""#include #include 

EchoServer::EchoServer(muduo::net::EventLoop* loop, 
                    const muduo::net::输入地址& listenAddr)
                    : server_(loop, listenAddr, "EchoServer")
    {
        (
            boost::bind(&EchoServer::onConnection, this, _1));
        (
            Boost(和ECHOSEVER::ON音讯), this, _1, _2, _3));
    }

void EchoServer::start()
{
    ();
}

void EchoServer::onConnection(const muduo::net::TcpConnectionPtr& 康恩)
{
    LOG_INFO << "EchoServer - " << conn->peerAddress().toIpPort() << " -> "
    << conn->localAddress().toIpPort() << " is "
    << (conn->connected() ? "UP" : "DOWN");
}

void EchoServer::在音讯中const muduo::net::TcpConnectionPtr& conn,
    muduo::net::Buffer* buf,
    muduo::Timestamp 工夫)
{
    muduo::string msg(buf->retrieveAllAsString());
    LOG_INFO << conn->name() << " echo " << () << " bytes, "
    << "data received at " << ();

    conn->发送(MSG)
}
#include ""#include #include int main()
{
  LOG_INFO << "pid = " << getpid();
  muduo::net::EventLoop loop;
  muduo::net::输入地址 listenAddr(1024);
  EchoServer 检修(和圈), listenAddr);
  ();
  ();
  return0;
}

写信发送

muduo是定态关联的C++书斋,头发送和库发送按某路线发送理所当然在MaFixFig Fi中指派。

PROGS+=echo1 echo2
CLEANFILES = core 结心。 *.core *.o temp.* *.out typescript* \
        *.lc *.lh *.bsdi *.sparc *.uw

MUDUO_DIRECTORY = ${HOME}/build/release-install
MUDUO_INCLUDE = $(MUDUO_DIRECTORY)/include
MUDUO_LIBRARY = $(MUDUO_DIRECTORY)/lib
OUTPUT=${PWD}/bin

all :${PROGS}



MAKE_BIN_DIR := (蚬壳石油) mkdir -p (输入) )

CXXFLAGS+=-g -std=c++11 -I${MUDUO_INCLUDE}
LDFLAGS+=-L${MUDUO_LIBRARY} -lmuduo_net -lmuduo_base -lpthread -lrt

echo1:echo1/
    ${CXX}${CXXFLAGS}  -o ${OUTPUT}/$@   $^  ${LDFLAGS}
    @rm echo1/*.o
echo2: echo2/echo2.o echo2/echoserver.o
    ${CXX}${CXXFLAGS} -o ${OUTPUT}/$@   $^  ${LDFLAGS}
    @rm echo2/*.o

clean:
    rm -rf ${OUTPUT} 


.PHONY: all clean

1.4 试验的背地里检修回响

地方的运转,应用netcat举行试验的:

nc localhost 1024

检修将反复教科书典型:

依人们的回信汇数,检修也有有重大意义的的书信:


(二)参考文献

1。Linux多线检修设计 应用muduo C 电力网库

发表评论

电子邮件地址不会被公开。 必填项已用*标注