Linux编程
文章平均质量分 86
YongYu_IT
区块链,分布式系统
展开
-
Java NIO框架-Netty-4 处理Http协议
1/ 从FullHttpRequest里解析Post请求FullHttpRequest arg1...HttpPostRequestDecoder decoder = new HttpPostRequestDecoder(arg1);decoder.offer(arg1);List parmList = decoder.getBodyHttpDatas();for (Interf原创 2018-01-12 10:44:08 · 543 阅读 · 0 评论 -
Java NIO框架-Netty-6 Nginx配置WebSocket(没写完)
利用Nginx反向代理WebSocket服务器集群1、假设现在有两个java线程线程a 监听8888端口,提供http服务线程b 监听9999端口,提供ws服务请求http服务:http://192.168.0.30:8888/test_http返回:200 ok请求ws服务:socket=new WebSocket("ws://192.168.0.30:9999/test原创 2018-01-19 16:35:00 · 2925 阅读 · 1 评论 -
Java NIO框架-Netty-7 TCP粘包/拆包
为什么会有这样的问题?TCP是一个面向字节流的协议,所谓字节流就是没有界限的一串数据。要想从这个混沌的流中获取数据并解析含义必须经过:分割读取-->解码 这两个基本过程。其中我们将分割读取后获得的一段一段有含义的数据叫做包。很显然,从TCP流中读取数据之初,我们并不知道包有多大,界限在哪里,因此我们常常会借助于一个一定大小的缓存区读取进行数据读取。也就是说每次读取缓存获得的数据可能原创 2018-01-25 13:41:41 · 545 阅读 · 0 评论 -
Java NIO框架-Netty-5 心跳检测
IdleStateHandler原创 2018-01-18 17:44:40 · 891 阅读 · 0 评论 -
Java NIO框架-Netty-1 概览
Netty核心组件ChannelCallBackFutureEvent & ChannelHandlerChannelchannel 抽象了一个关联到文件描述符的全双工(双向)连接,关键操作有:连接,断开,打开,关闭,读,写。CallBack这个无需多谈Future这是一个异步操作结果的占位符。每一个Netty的I/O操作都会返回一个ChannelF原创 2018-01-10 13:19:37 · 255 阅读 · 0 评论 -
Java NIO框架-Netty-2 引导类
Netty提供两种引导一种用于客户端,Bootstrap一种用于服务端,ServerBootstrap客户端和服务器是两种不同的编程模式,客户端只需要关注连接到服务器的这个特定的连接(类似普通的java Socket);服务端需要关注接入连接动作(类似java ServerSocket的Accept)和特定的客户端连接(Accept产生的Socket)。如上所述,Bootstrap原创 2018-01-10 15:00:17 · 283 阅读 · 0 评论 -
GNU与linux
linux是一个操作系统内核GNU自由软件计划,是一系列的自由软件集合,著名的有GCC,GDB,GNU make等。这些自由软件运行在linux操作系统之上,遵循自由开源原则,符合GPL协议。GNU组织官网:http://www.gnu.org/...原创 2018-05-22 14:46:43 · 429 阅读 · 0 评论 -
网络IO模型专题(一)基本概念
问题的由来每一个socket是一个文件描述符。可以对其进行打开、读取、写入、关闭操作。在服务器编程时,往往需要同时处理多个socket。每个socket对应了一个客户端。这样的话,如何读取这些socket里面的数据?这就是本文关注问题的由来,即:对socket数据的读取方式——网络IO模型* 注意,这里不要和accept阻塞搞混了。讨论IO模型的前提是已经建立了若干个socket,如何从这些soc...原创 2018-06-25 17:25:33 · 481 阅读 · 0 评论 -
网络IO模型专题(二)演进
概况基本上网络IO的演进可以划分为3个阶段· 阻塞式IO/IO复用有代表性的是Apache,Apache采用select+多进程/多线程方案· 伪AIO/AIO有代表性的是Nginx,Nginx采用的是epoll+多进程/多线程方案· 协程有代表性的是Golang...原创 2018-06-26 16:44:52 · 260 阅读 · 0 评论 -
Qt + CMake开发
Qt添加CMake支持1、下载CMake并解压参考https://cmake.org/download/$ wget https://cmake.org/files/v3.12/cmake-3.12.0-rc3.tar.gz$ tar xvf cmake-3.12.0-rc3.tar.gz2、编译并安装CMake$ cd cmake-3.12.0-rc3/$ ./bootstrap$ mak...原创 2018-07-16 13:32:27 · 3106 阅读 · 0 评论 -
Java NIO框架-Netty-3 ChannelHandler & ChannelPipeline
ChannelInboundHandler这是一个继承于ChannelHandler的处理接口,这个接口专门用于处理入站事件和数据一般业务逻辑常在这个接口里实现。ChannelPipelineChannelPipleline是容纳Channel Handler的链容器,所有事件都可以借由这个链条传递到链上所有的ChannelHandler。每个Channel都有一个Channe原创 2018-01-10 16:01:10 · 373 阅读 · 0 评论 -
C++ Socket(六)
1、主要的IO模式IO模式是指从socket中读写数据(特别是读)的方式,常见的IO模式有1.1 阻塞IO模型当用户进程调用读取函数(如recvmsg())时,内核将阻塞用户进程直至有足够数据达到读取函数才返回。1.2 非阻塞IO模型当用户进程调用读取函数(如recvmsg())时,内核立即返回数据(没有数据的话就返回错误信息)给用户进程(即读取函数将立即返回)。这样的原创 2017-08-29 15:21:18 · 1007 阅读 · 0 评论 -
pthread(二)
线程属性线程属性使用初始化函数pthread_attr_init()创建(创建必须发生在pthread_create()函数使用这个线程属性之前)。线程属性设置只能通过专用函数操作,不能直接修改数据结构1、线程优先级pthread_attr_getschedparam():获取线程优先级pthread_attr_setschedparam():设置线程优先级2、线程原创 2017-08-16 16:43:03 · 523 阅读 · 0 评论 -
C++ Socket(三)
IO函数主要的IO函数有read()/write()recv()/send()recvmsg()/sendmsg()readv()/writev()write()函数#include ssize_t write (int __fd, const void *__buf, size_t __n);将长度为__n的字节从__buf写入__fd指向的文件中原创 2017-08-17 14:41:46 · 716 阅读 · 0 评论 -
C++ Socket(四)
Socket编程中两个重要的系统信号量信号量又称为软中断。在Linux系统中,信号量是系统向用户进程发出通知的重要方式!系统会首先调用用户进程中注册的处理函数,最后调用系统默认的处理函数病吞没这个信号量。信号量注册函数为#includetypedef void (*__sighandler_t) (int);__sighandler_t signal (int __si原创 2017-08-17 16:38:22 · 292 阅读 · 0 评论 -
QT Linux
1、安装在Ubuntu Software Center中搜索Qt,找到QtCreator,点击安装即可2、使用Ctrl+i => 格式化代码原创 2017-08-11 19:36:40 · 330 阅读 · 0 评论 -
POSIX标准
1、什么是POSIX标准Portable Operating System Interface for Computing System.他是一个针对操作系统(准确地说是针对类Unix操作系统)的标准化协议。这个协议是对操作系统服务接口的标准化,从而保证了应用程序在源码层次的可移植性。如今主流的Linux系统都做到了兼容POSIX标准。2、POSIX标准的C/C++库C/C++的标准库是指ANSI...原创 2017-08-11 11:48:10 · 15923 阅读 · 0 评论 -
C++ Socket(二)
服务器实例#include #includeusing namespace std;#ifdef __cplusplusextern "C" {#endif#include#include#include#include #include #ifdef __cplusplus}#endif#ifndef MYSOCKET_PORT#define MYSOC原创 2017-08-14 17:44:48 · 453 阅读 · 0 评论 -
Linux进程(一)
进程产生过程1、复制父进程环境配置2、在内核中建立进程结构PCB3、将这个结构(PCB)插入到进程列表,交给操作系统管理调度4、操作系统调起进程,分配进程5、复制父进程的内存映射信息6、管理文件描述符和链接点7、通知父进程进程终止方式1、从main函数返回2、调用exit函数3、调用_exit函数4、调用abort函数5、由信号量终止进程在终原创 2017-08-15 15:33:43 · 254 阅读 · 0 评论 -
Linux进程(二)
PID,getpid()#include #include pid_t getpid(void);//获取当前线程的PIDpid_t getppid(void);//获取当前进程的父进程PID查找特定进程号命令:ps -x|grep XXXX进程产生方式1、fork()以父进程为蓝本,复制一个进程。复制出的进程PID与父进程的PID不同。#include原创 2017-08-15 15:55:41 · 271 阅读 · 0 评论 -
C++ Socket(一)
1、Socket流程1.1、三次握手:这是建立TCP连接过程2、socket()#include#includeint socket(int domain,int type,int protocol);domain:域,socket函数根据此参数选择通信协议的族,通信协议族在文件sys/socket.h中定义。在以太网中用PF_INET(有时也用AF原创 2017-08-14 14:31:25 · 704 阅读 · 0 评论 -
C++ Socket(五)
recvmsg()/sendmsg()函数是socket编程中最常用的函数。其他IO函数能实现的一切功能recvmsg()/sendmsg()都可实现,下面是一个简单的例子服务端#include #include#include#include#include#include #include #include#includeusing namespace std;原创 2017-08-29 11:22:06 · 411 阅读 · 0 评论 -
pthread(一)
#include #ifdef __cplusplusextern "C" {#endif#include#ifdef __cplusplus}#endifusing namespace std;void* do_task(void* params);int main(){ cout << "Hello World!" << endl; pthre原创 2017-08-15 19:30:43 · 353 阅读 · 0 评论