分类 编程 中的文章
五种网络IO模型总结
概述
在网络上看到很多关于阻塞IO、非阻塞IO、同步IO、异步IO的例子,总觉得写的过于复杂并且让人难以理解。于是我把我自己把这几个概念的理解写下来以供参考。
POSIX
POSIX(可移植操作系统接口)把同步IO操作定义为导致进程阻塞直到IO完成的操作,反之则是异步IO
……CCnet | 一个reactor单线程网络库
缘由
最近在研究陈硕的网络库muduo,是一个基于reactor架构的网络库。我对网络库的感觉是易用,但是内容庞大,依赖颇多。比如boost网络库里面的一些语法让人生畏。关于reactor和proactor架构,还有select/poll/epoll网络模型方面的基础理论知识已经掌握,自己也一直想做一个网络库来对自己之前工作的一个总结。muduo整体代码量不多,易读,整个架构也容易理解,于是我模仿muduo写了一个单线程的reactor网络库。
……C++ | vector中的resize()函数 VS reserve()函数
reserve
void reserve (size_type n);
reserver函数用来给vector预分配存储区大小,即capacity的值 ,但是没有给这段内存进行初始化。reserve 的参数n是推荐预分配内存的大小,实际分配的可能等于或大于这个值,即n大于capacity的值,就会reallocate内存 capacity的值会大于或者等于n 。这样,当ector调用push_back函数使得size 超过原来的默认分配的capacity值时 避免了内存重分配开销。
……Golang | 用gocolly登录B站
概述
gocolly是golang语言开发的爬虫包,通过gocolly来进行模拟网站的登录,
目标已经确立,开始行动。
下载
$ go get -u github.com/gocolly/colly
获取cookie
登录网站:https://www.bilibili.com/
获取cookie:
Protobuf | 沾包问题
缘由
最近在研究一款游戏的源码。发现里面的通信协议是protobuf定义的,但还是自己定义了协议头部,类似 head + body。先解析头部里所存储的整个包的数据长度,然后再解析包剩余的数据,这样做的目的是为了防止沾包。我在想都用了protobuf了为啥不直接用grpc呢。一时想不出,于是我用golnag + protobuf 做了一个简单的client + server
……Grpc | 概述
OverView
gRPC是由Google主导开发的RPC框架,使用HTTP/2协议并用ProtoBuf作为序列化工具。其客户端提供Objective-C、Java接口,服务器侧则有Java、Golang、C++等接口,从而为移动端(iOS/Androi)到服务器端通讯提供了一种解决方案。 当然在当下的环境下,这种解决方案更热门的方式是RESTFull API接口。该方式需要自己去选择编码方式、服务器架构、自己搭建框架(JSON-RPC)。gRPC官方对REST的声音是:
……Openresty二 | postman小工具
用到的知识点
mvc架构
模型渲染库:https://github.com/bungle/lua-resty-template
resty http请求库: https://github.com/bungle/lua-resty-template
参照 mvc模型来做postman工具
配置文件说明
worker_processes 1;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
lua_package_path "/open_resty/lualib/?.lua;/usr/local/openresty/lualib/?.lua;";
server {
listen 8080;
default_type 'application/json;charset=utf8';
lua_code_cache off;
location / {
content_by_lua_file mvc.lua;
}
location ~ ^/js/|^/css/|\.html {
root static;
}
}
}
- lua_code_cache off; 是为了修改lua脚本后不用重启nginx自动加载lua。- lua_package_path: lua脚本路径- root static: 静态目录是static
入口文件/解析uri
mvc.lua
……Openresty一 | 初探
概述
OpenResty®是一个基于Nginx与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty®通过汇聚各种设计精良的Nginx模块(主要由 OpenResty 团队自主开发),从而将Nginx有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动Nginx支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
……LastBattle | 登录流程(LS & BS & GS)
登录流程
根据上一篇文章中的登录流程,我在工程中找到了相应的代码并记录了下来
登录服务代码解析
监听端口:49997 供BS服务连接
监听端口:49996 供客户端连接
CIocpCtrl:IOCP控制类
多线程循环查询IOCP内部的网络事件,并分派处理.这里多个工作线程仅仅是将所有的网络事件放入循环
内部将创建2 * CPU个工作线程(Worker Item).
多线程调用函数