开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 3

SpringBar98/HEpoll

forked from 贺先生/HEpoll
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
hepoll
/
ClientTest.cpp
hepoll
/
ClientTest.cpp
ClientTest.cpp 4.72 KB
一键复制 编辑 原始数据 按行查看 历史
hejinlong 提交于 2020年09月15日 10:46 +08:00 . epoll file initial
#include <cstdio>
#include <iostream>
#include "HEpoll.h"
#include "AliasRef.h"
/**
* 测试Client端功能
*/
#define CHKRET(r) if(r){printf(#r "=%d\n", r); return r;}
#define ELSEPRINT(tip, ...) else {printf("F: " tip "\n", ##__VA_ARGS__);}
atomic_int g_send_count(0);
atomic_int g_recv_count(0);
atomic_ullong g_send_bytes(0);
atomic_ullong g_recv_bytes(0);
chrono::steady_clock::time_point g_send_tbeg1;
chrono::steady_clock::time_point g_send_tbeg2;
chrono::steady_clock::time_point g_recv_tend;
int toTimeT(chrono::steady_clock::time_point tp)
{
return tp.time_since_epoch().count();
}
void OnRespond(const string& msg, weak_ptr<ConnectMeta> wconnMeta)
{
g_recv_bytes += msg.size();
g_recv_count += 1;
g_recv_tend = chrono::steady_clock::now();
printf("recv=%llu bytes %d rows, time=%f(%d->%d->%d)\n", g_recv_bytes.load(), g_recv_count.load(),
chrono::duration_cast<chrono::milliseconds>(g_recv_tend-g_send_tbeg1).count()/1000.0,
toTimeT(g_send_tbeg1), toTimeT(g_send_tbeg2), toTimeT(g_recv_tend));
}
int main(int argc, char** argv)
{
if (argc < 3)
{
CHKRET(argc);
}
string svrHost(argv[1]);
int svrPort = stoi(argv[2]);
HEpoll hep;
int ret = hep.init();
CHKRET(ret);
hep.setAliasNameInstance(make_shared<AliasRef<ConnectMetaSPtr>>());
hep.run(true);
string name0("cli-");
string input;
static int cIdx = 0;
while (cin >> input, input != "q")
{
if ('c' == input[0])
{
int cCnt = input.size() > 1 ? stoi(input.c_str() +1) : 1;
for (int i = 0; i < cCnt; i++)
{
auto conn = hep.addTcpConnect(svrHost, svrPort, 1, false);
if (conn)
{
hep.addAliasName(name0 + to_string(++cIdx), conn);
//int rSndBuf = conn->setSndBuffSize(10);
//int rRcvBuf = 0; //conn->setRcvBuffSize(10);
//printf("connect sndBuffSize %d rcvBuffSize=%d\n", rSndBuf, rRcvBuf);
conn->onMessageReachFunc = OnRespond;
//conn->sendMsg("begin test\n");
conn->start();
}
ELSEPRINT("addTcpConnect fail");
}
}
else if ('s' == input[0])
{
int sCnt = stoi(input.c_str() + 1);
if (sCnt > 0)
{
string datBuf(sCnt-1, '1');
datBuf.append("2\n");
g_send_tbeg1 = chrono::steady_clock::now();
for (int i = 1; i <= cIdx; i++)
{
string aliName = name0 + to_string(i);
auto conn = hep.find(aliName);
if (conn)
{
int muti = 3;
for (int i = 0; i < muti; i++)
{
if (0 == conn->sendMsg(datBuf))
{
g_send_count += 1;
g_send_bytes += datBuf.size() - 1;
}
ELSEPRINT("XXX sendMsg fail");
}
}
ELSEPRINT("hep.find(%s) fail", aliName.c_str());
}
}
g_send_tbeg2 = chrono::steady_clock::now();
printf("sending=%llu bytes %d rows\n", g_send_bytes.load(), g_send_count.load());
}
else if ("r" == input)
{
g_send_count = 0;
g_recv_count = 0;
g_send_bytes = 0;
g_recv_bytes = 0;
}
else if ('p' == input[0])
{
printf("hep status=%s\n", hep.toString().c_str());
printf("send=%llu@%d recv=%llu@%d\n", g_send_bytes.load(), g_send_count.load(),
g_recv_bytes.load(), g_recv_count.load());
printf("send_t1=%d send_t2=%d recv=%d %fsec\n", toTimeT(g_send_tbeg1), toTimeT(g_send_tbeg2),
toTimeT(g_recv_tend), chrono::duration_cast<chrono::milliseconds>(g_recv_tend-g_send_tbeg1).count()/1000.0);
if (input[1] > 0)
{
string aliName = name0 + input.substr(1);
auto connMeta = hep.find(aliName);
if (connMeta)
{
printf("%s : %s\n", aliName.c_str(), connMeta->toString().c_str());
}
}
}
//
input.clear();
}
printf("notify Exit");
hep.notifyExit();
hep.unInit();
return 0;
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

基于epoll-ET的I/O复用库;
暂无标签
GPL-3.0
使用 GPL-3.0 开源许可协议
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/springbar98/hepoll.git
git@gitee.com:springbar98/hepoll.git
springbar98
hepoll
HEpoll
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /