3
路过
2009/06/15 12:24
这种发送方式只能保证来把消息发送出去,通过多次发送。但不利于并发操作,不太适合服务器。操作cout << "busy
now ...." << endl;在发送过程中被执行了好多次。而其他消息得不到处理。我的处理方式是和epoll结合:
# if(errno == EAGAIN
# || errno == EINTR)
# {
# //记录当前未发完消息的状态,继续处理其他消息。等待 EPOLLOUT的返回(意味着发送缓冲区可写),再
继续发送那个未完的消息。
# }
now ...." << endl;在发送过程中被执行了好多次。而其他消息得不到处理。我的处理方式是和epoll结合:
# if(errno == EAGAIN
# || errno == EINTR)
# {
# //记录当前未发完消息的状态,继续处理其他消息。等待 EPOLLOUT的返回(意味着发送缓冲区可写),再
继续发送那个未完的消息。
# }
我使用了如下的方式,也不是阻塞,是异步多路中使用的,效率要高一些,相信您能看懂:
std::string m_SendStoreBuf;
std::string m_SendingBuf;
std::string m_SendingBegin;
当m_SendingBegin == m_SendingBuf.size();时
m_SendStoreBuf.swap(m_SendingBuf);
m_SendStoreBuf.clear();
m_SendingBegin = 0;
逻辑代码发送时只是 m_SendStoreBuf += Data;
std::string m_SendStoreBuf;
std::string m_SendingBuf;
std::string m_SendingBegin;
当m_SendingBegin == m_SendingBuf.size();时
m_SendStoreBuf.swap(m_SendingBuf);
m_SendStoreBuf.clear();
m_SendingBegin = 0;
逻辑代码发送时只是 m_SendStoreBuf += Data;
huzhangyou2002 回复于 2009/04/23 17:47
验证中。思路不错,感谢
skeeter
2009/02/24 10:48
这个函数里面为什么要有count这个参数呢?
huzhangyou2002 回复于 2009/02/24 12:41
这个参数可以直接使用sendbuff.size()但是有时候需要控制 并不是发送sendbuff的全部数据,可以通过这里来控制
分页: 1/1
1
1
庆祝基于Proxy的BT协议系统内网全线调通
linux下面获取本机IP的函数


2009/02/21
12:35
4125





