64 lines
1.2 KiB
C++
64 lines
1.2 KiB
C++
#include "muduo/net/TcpServer.h"
|
|
|
|
#include "muduo/base/Atomic.h"
|
|
#include "muduo/base/Logging.h"
|
|
#include "muduo/base/Thread.h"
|
|
#include "muduo/net/EventLoop.h"
|
|
#include "muduo/net/InetAddress.h"
|
|
|
|
#include <utility>
|
|
|
|
#include <stdio.h>
|
|
#include <unistd.h>
|
|
|
|
using namespace muduo;
|
|
using namespace muduo::net;
|
|
|
|
void onConnection(const TcpConnectionPtr& conn)
|
|
{
|
|
if (conn->connected())
|
|
{
|
|
conn->setTcpNoDelay(true);
|
|
}
|
|
}
|
|
|
|
void onMessage(const TcpConnectionPtr& conn, Buffer* buf, Timestamp)
|
|
{
|
|
conn->send(buf);
|
|
}
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
if (argc < 4)
|
|
{
|
|
fprintf(stderr, "Usage: server <address> <port> <threads>\n");
|
|
}
|
|
else
|
|
{
|
|
LOG_INFO << "pid = " << getpid() << ", tid = " << CurrentThread::tid();
|
|
Logger::setLogLevel(Logger::WARN);
|
|
|
|
const char* ip = argv[1];
|
|
uint16_t port = static_cast<uint16_t>(atoi(argv[2]));
|
|
InetAddress listenAddr(ip, port);
|
|
int threadCount = atoi(argv[3]);
|
|
|
|
EventLoop loop;
|
|
|
|
TcpServer server(&loop, listenAddr, "PingPong");
|
|
|
|
server.setConnectionCallback(onConnection);
|
|
server.setMessageCallback(onMessage);
|
|
|
|
if (threadCount > 1)
|
|
{
|
|
server.setThreadNum(threadCount);
|
|
}
|
|
|
|
server.start();
|
|
|
|
loop.loop();
|
|
}
|
|
}
|
|
|