evpp tcp server服务端
// netserver.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <evpp/tcp_server.h> #include <evpp/buffer.h> #include <evpp/tcp_conn.h> #include <vector> #include <list> using namespace std; #ifdef _WIN32 #include "winmain-inl.h" #endif std::vector<evpp::TCPConnPtr> conns; std::vector<evpp::TCPConnPtr>::iterator iter; void OnMessage(const evpp::TCPConnPtr& conn, evpp::Buffer* msg) { std::string s = msg->NextAllString(); // LOG_INFO << "Received a message [" << s << "]"; std::cout << conns.size() << std::endl; for (iter = conns.begin(); iter != conns.end(); iter++) { if (*iter != conn) { evpp::TCPConnPtr sconn; sconn = *iter; sconn->Send(s); } else continue; } if (s == "quit" || s == "exit") { conn->Close(); } } void OnConnection(const evpp::TCPConnPtr& conn) { if (conn->IsConnected()) { std::cout << "Accept a new connection from " << conn->remote_addr(); std::cout << conn->remote_addr() << std::endl; conns.push_back(conn); } else { std::cout << "Disconnected from " << conn->remote_addr(); // conns.pop(conn); conns.erase(remove(conns.begin(), conns.end(), conn), conns.end()); } } int main(int argc, char* argv[]) { std::string port = "9099"; conns.clear(); std::string addr = std::string("0.0.0.0:") + port; evpp::EventLoop loop; evpp::TCPServer server(&loop, addr, "TCPEcho", 0); server.SetConnectionCallback(&OnConnection); server.SetMessageCallback(&OnMessage); server.Init(); server.Start(); loop.Run(); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了