网络模块()
一.服务端:
暂时就以libevent模块,共享内存等下
.GS打开,首先创建4个libevent子线程,当然为每个线程设置连接通知回调函数,这个是基于sockpair的,然后再创建一个监听线程,专门负责监听
.监听线程收到一个连接后,通过轮询选择一个线程,然后向这个线程的conn_queue连接队列中插入一个libevent封装的一个socket,然后向socketpair中发送一个字节的数据
.此时子线程会收到通知,从连接队列中弹出一个socket,然后创建一个基于此socket的bufferevnet,然后设置读事件和socket状态改变事件,此时服务器就准备好了客户端的连接
二.客户端:
打开客户端,对于客户端libevent是单线程的,客户端会调用libevent的接口,
init--->创建m_base,调用windows初始化函数,设置回调函数指针
listen--->看了这么久,终于知道咋回事了,客户端是不需要监听,但他创建一个线程取循环eventbase是必须的
connectserver--->创建基于socket的bufferevent,然后连接,然后设置读写,事件回调
bool TcpLinkEx::Connect(int ip, int port)
{
{
//关于此处加锁,个人觉得是因为此处是主线程操作g_curTcpLinkEx,等libevent线程回调也会操作这个g_curTcpLinkEx,所以加锁
std::lock_guard<std::mutex> lock(g_mux);//libevent回调TcpServer直接操作g_curTcpLinkEx,里面有m_event,调用NGP
g_curTcpLinkEx = this;//这个设置成this,到时会调用同样的对象的,TcpLink的直接回调和libevent回调的会在一个客户端发生
} if(!m_tcpServer->connet_to(ip, port))
{
m_event->OnConnectFailed();//直接操作M_EVENT,调用NGP
return false;
}
return true;
} bool NGP::OnConnectFailed()
{
std::lock_guard<std::mutex> lock(m_PktMutex);//此处加锁肯定是因为ngp里面应该有个线程取m_queFunctions中的数据
m_queFunctions.push(std::bind(&NGP::Connect2ServerFailed, this));
return true;
}
//这个是libevent回调的
void on_connect(int channel_id)
{
std::lock_guard<std::mutex> lock(g_mux);
auto link = g_curTcpLinkEx;
g_curTcpLinkEx = nullptr;
g_TcpLinkExs[channel_id] = link;
link->m_channel_id = channel_id;
link->m_event->OnConnected();//到时会调用NGP的相关函数
}
网络(一),libevent客户端部分的更多相关文章
-
Socket网络编程--FTP客户端
Socket网络编程--FTP客户端(1)(Windows) 已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解F ...
-
【Networking】Libevent客户端例子
[原]Libevent客户端例子 时间 -- :: luotuo44的专栏 原文 http://blog.csdn.net/luotuo44/article/details/34416429 主题 l ...
-
[网络编程之客户端/服务器架构,互联网通信协议,TCP协议]
[网络编程之客户端/服务器架构,互联网通信协议,TCP协议] 引子 网络编程 客户端/服务器架构 互联网通信协议 互联网的本质就是一系列的网络协议 OSI七层协议 tcp/ip五层模型 客户端/服务器 ...
-
轻量级网络库libevent概况
Libevent is a library for writing fast portable nonblocking IO. libevent是一个为编写快速可移植的非阻塞IO程序而设计的. lib ...
-
轻量级网络库libevent初探
本文是关于libevent库第一篇博文,主要由例子来说明如何利用该库.后续博文再深入研究该库原理. libevent库简介 就如libevent官网上所写的“libevent - an event n ...
-
Socket网络编程--FTP客户端(1)(Windows)
已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...
-
[原]网络库libevent在Visual Studio中的使用方法
libevent是一个事件触发的网络库,适用于windows.linux.bsd等多种平台,内部使用select.epoll.kqueue等系统调用管理事件机制.著名分布式缓存软件memcached也 ...
-
Java网络编程(TCP客户端)
TCP传输:两个端点建立连接后会有一个传输数据的通道,这个通道就称为流,而且是建立在网络基础上的流,之为socket流,该流中既可以读取也可以写入. TCP的两个端点:一个客户端:ServerSock ...
-
Socket网络编程--FTP客户端(60篇socket博客,而且都比较简单、深入浅出)
已经好久没有写过博客进行分享了.具体原因,在以后说. 这几天在了解FTP协议,准备任务是写一个FTP客户端程序.直接上干货了. 0.了解FTP作用 就是一个提供一个文件的共享协议. 1.了解FTP协议 ...
随机推荐
-
Entity Framework 6 Recipes 2nd Edition(10-9)译 ->; 在多对多关系中为插入和删除使用存储过程
10-9. 在多对多关系中为插入和删除使用存储过程 问题 想要在一个无载荷的多对多关系中使用存储过程(存储过程只影响关系的连接表) 解决方案 假设有一个多对多关系的作者( Author)表和书籍( B ...
-
提交ajax验证用户名是否已存在
前端页面 <tr> <td class="p_label"><span class="notnull"></span& ...
-
SSM+DUBBO/ZK异常
1.Could not find resource(mybatis本身不支持通配符,是spring提供的ant匹配法) 2.ClassNotFoundException: org.I0Itec.zkc ...
-
HT图形组件设计之道(三)
上篇我们通过定制了CPU和内存展示界面,体验了HT for Web通过定义矢量实现图形绘制与业务数据的代码解耦及绑定联动,这类案例后续文章还会继续以便大家掌握更多的矢量应用场景,本篇我们先切换个话题, ...
-
Masonry
Autolayout就像一个知情达理,善解人意的好姑娘,可惜长相有点不堪入目,所以追求者寥寥无几.所幸遇到了化妆大师cloudkite,给她来了一个完美的化妆,从此丑小鸭Autolayout变成了美天 ...
-
c#知识总结2
四.C#类型转换 类型转换就是把一种类型转换成为另一种类型. 隐式类型转换:c#默认的以安全方式进行的转换.例如小整数类型转换为大整数类型.派生类转换为基类 显式类型转换:用户使用的预定义的函数显式完 ...
-
docker导入本地镜像
-rw-r--r-- 1 root root 98954220 Mar 17 17:02 centos-6-x86.tar.gz 利用下载的包 创建镜像: cat centos-6-x86.tar.g ...
-
我的Linux软件集
把我常用的软件记下来,以后重装安装的时候方便一些- 这个博文会不断更新的- 开发工具类 Monodevelop 编写C#控制台程序和GTK#窗口程序,很好,虽然没有VS强大,但是够用了 CodeBlo ...
-
Mybatis按顺序获取数据
sql语句select * from producttg where hospitalcode in (1,2,3) 获取到的数据并不是按照条件1,2,3的顺序排列,如果要成下面形式(mybatis ...
-
[视频]K8飞刀 Discuz! X 系列(1.5 2.5 3.x)产品升级漏洞GetShell教程
K8飞刀 Discuz! X 系列(1.5 2.5 3.x)产品升级漏洞GetShell教程 https://pan.baidu.com/s/1bnv2euz