服务器开发
文章平均质量分 67
shiyicode
已弃用! 可以通过shiyi@threebody.xyz联系我
展开
-
Linux-C网络编程之epoll函数
上文中说到如果从100的不同的地方取外卖,那么epoll相当于一部手机,当外卖到达后,送货员可以通知你,从而达到每去必得,少走很多路。 它是如何实现这些作用的呢?epoll的功能epoll是select/poll的强化版,同是多路复用的函数,epoll有了很大的改进。支持监听大数目的socket描述符* 一个进程内,select能打开的fd是有限制的,由宏FD_SETSIZE设置,默认值是102原创 2015-08-08 00:59:19 · 5608 阅读 · 0 评论 -
对比高性能I/O设计模式-Reactor/Proactor
通常,I/O复用机制都需要事件分享器。分享器对象可将来自事件源的I/O事件分离出来,并分发到对应的Read/Write事件处理器。开发人员预先注册需要处理的事件及该事件对应的事件处理器。 Reactor和Proactor都涉及到了事件分享器,不同的是,Reactor是基于同步I/O的,而Proactor是与异步I/O相关。在Reactor模式中,事件分离器等待某个事件或者某个操作的状态发生,比如文原创 2017-03-01 18:40:34 · 1528 阅读 · 0 评论 -
linux之信号处理函数signal和sigaction
signal回调函数绑定信号(signal)是一种软件中断,它提供了一种处理异步事件的方法,也是进程间惟一的异步通信方式。那么我们很多场景下,需要对不同的信号进行捕获并做出响应操作。 在linux上,我们有两种方式完成该操作:1. signal#include <signal.h>signal(int, void (*)(int)); 第一个参数是我们要捕获的信号类型,第二个参数是我们要绑定的原创 2016-11-22 03:20:44 · 5479 阅读 · 0 评论 -
Epoll-ET模式下非阻塞读写之Buffer的封装
先说说Epoll的ET模式 epoll默认的模式是LT,要说ET不得不提到LT,LT与ET的区别可以用一句话概括: LT模式下只要socket处于可读状态(添加EPOLLIN事件时)或可写状态(添加EPOLLOUT事件时),就会一直返回其socket。 ET模式下在第一次返回socket后,只有当socket由不可写到可写(添加EPOLLIN事件时)或由不可读到可读(添加EPOLLO原创 2016-12-03 03:44:34 · 1953 阅读 · 0 评论 -
Epoll-ET模式读写之用户连接的封装
前言 服务端而言,对于每一个新的连接我们都需要去保存其基本信息,如ip地址,套接字fd,也需要赋予其唯一标识如用户名。 这里,我们来谈谈对用户连接的封装。用户连接需要哪些数据1. 套接字描述符 sockfd 执行读写操作时当然不可缺2. 连接信息 sockaddr 基本信息的保存3. 用原创 2016-12-03 16:36:16 · 710 阅读 · 0 评论 -
linux服务器开发之网关服务器的实现
什么是网关服务器 初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。 但是在处理量很大的情况下,一台机器不能满足我们的需求,此时我们应该怎么办。 我们可以将服务端的任务分摊到多台机器上完成,见下图 从图中可见,此时整个服务端主要分为了三部分。 网关服务器:负责连接客户端与逻辑服务器原创 2016-12-05 21:50:10 · 8202 阅读 · 2 评论 -
Linux 怎样实现非阻塞connect
前言 凡是接触过socket编程的,对connect函数一定不陌生。因为socket是面向连接的,所以在进行读写操作前我们首先要进行连接,而所谓连接也就是我们常说的三次握手,这个过程就是在connect函数中完成的。 虽然connect函数本身不具备阻塞的功能,但是我们可以通过对socket进行设置和使用select函数可以设置阻塞时间的特性实现非阻塞。为什么要非阻塞 第一,我们可以原创 2016-11-07 19:50:09 · 6126 阅读 · 0 评论 -
linux之创建守护进程
简介 守护进程是一种运行在后台的特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。 其实,本质上守护进程和普通的进程并没有什么区别,只是我们规定了一种进程的编写规则,将其叫做守护进程,仅此而已。特点1. 在后台运行 为了不让其阻塞终端,我们用fork()创建子进程,然后退出父进程,就可以完成在后台运行的目的。2. 脱离控制终端,创建新的会话组和进程组原创 2016-10-17 17:48:49 · 1900 阅读 · 1 评论 -
linux之fcntl&flock建议锁的操作
前言当我们要进行多进程编程的时候,经常存在多个进程需要访问同一个文件的情况,因此会产生进程间访问不一致的问题,那么我们可以用到fcntl函数,我们可以用它来对文件或者文件的一部分进行上锁。 #include <unistd.h> #include <fcntl.h> int fcntl(int fd, int cmd, ... /* arg */ );fcntl 可以施加建议性锁,也原创 2016-10-12 22:33:10 · 1854 阅读 · 0 评论 -
linux线程初学之实现打字母功能
前言 近日开始了吾之线程学习,略有所得,与进程相比,其可多线程同时执行代码段的特性,实是魅力巨大。 窃以为编程学习如武艺修炼,学了招式不过两招实在不应该,故做一打字母,实践练习。主要思路 打字母功能最主要的地方是 “字母不停下落,若按下对应键,字母消失,且在上方出现新的字母,重复此过程”。 简而言之,就是在向屏幕输出信息时还需要实时接受用户按键,而这与我们之前学习的程序设计顺序原创 2015-07-26 06:59:20 · 1299 阅读 · 0 评论 -
Boost.Asio网络库之io_service分析
io_service概述几乎绝大多数用到Boost.Asio的代码里都会出现这样一个类:io_service。它应该算是Asio库里的核心类了,其本质是一个任务队列,但又不仅仅是个任务队列。基本结构io_service是个接口类(ps:这里解释一下,这里说接口类并不是指类似java的interface类,而是指其是对下层类做了一个包装,全部功能都是调用下层类来完成)。class io_service原创 2016-12-24 02:44:14 · 1827 阅读 · 0 评论 -
boost:asio信号量signal_set源码分析及使用
首先我们先看signal_set.hpp,可以看到下面代码#include <boost/asio/detail/config.hpp>#include <boost/asio/basic_signal_set.hpp>namespace boost {namespace asio {/// Typedef for the typical usage of a signal set.typed原创 2016-12-11 18:02:59 · 5081 阅读 · 1 评论 -
boost:asio网络库初学之echo服务器客户端实现
为什么想起来学网络库呢前一阵在网上看到这么一段话 select 实在是太慢了. 在这种背景下, IBM 老大哥带领着MS老弟先搞了 IOCP . 然而开源的人有开源的做法, 在 NIH 综合症的影响下, BSD 的人敢为天下所不齿, 发明了 Kqueue. 同样在 NIH 综合症影响下, Linux 的一群 M* 的猴子捣鼓出了 epoll. 分裂, 让人头疼. 于原创 2016-12-10 18:58:59 · 3638 阅读 · 0 评论 -
Linux-C网络编程之select函数
开门见山,如果我们要对多个客户端连接的多个事件进行操作,首先会想到建立多个线程或进程让其去各自进行,这也是最简单的模式。 但对每一个线程或进程而言,无论连接是否有事件发生,都必须随时待命,也就是说,每一个对象都必须有一个线程或进程与之一一对应,直到对象销毁。 可想而知,当连接量规模变大后,系统需要在很多个线程或进程之间进行切换,时间与空间上的开销巨大,也就是说,这种模式下,程序能承载对象原创 2015-08-06 05:15:19 · 4248 阅读 · 2 评论 -
linux文件管理小结之自定义more
1.more命令功能 more命令用于查看内容超过一屏的文本(类似于cat) 基本功能: 1.输入backspace :内容翻一屏 2.输入enter : 内容翻一行 3.输入q:退出 4.实时显示已读文件比例2.实现思路 从命令中获取需要操作的文件 打开文件:open(filename,O_RDONLY); 获取文件总行数: lseek(原创 2015-07-24 17:32:22 · 1036 阅读 · 0 评论 -
Mac Boost安装及使用(命令行和Xcode)
安装下载boost安装包 官网下载地址 https://sourceforge.net/projects/boost/files/boost/1.62.0/ 2.解压并进入boost_1_62_0文件夹 3.执行boostrap.sh ./boostrap.sh4.上一步执行成功后会生成b2脚本,执行它 ./b2 执行完毕后,头文件在boost_1_62_0/boos原创 2016-12-10 02:14:05 · 7337 阅读 · 0 评论