8 吓人的猿

尚未进行身份认证

我要认证

专注Linux系统开发,网络编程,服务后台开发

等级
TA的排名 1w+

通用Makefile,自动查找源文件

objs=$(patsubst %.c, %.o, $(wildcard *.c)) #将所有的*.c文件替换成*.o, .o可以作为目标文件.target=app   #目标应用程序变量名CC=gcc        #编译工具链指定CPPFLAGS=-Iinclude  #预编译标致-I -D等CFLAGS=-g -Wall     #编译标致 -g -Wall -fpic -O1等L...

2018-03-18 10:04:55

Linux下文件描述符剖析

了解莱茨狗 2018年1 月 12 日,百度正式上线了区块链开放平台“BaaS”后,百度金融区块链实验室日前又推出了区块链宠物莱茨狗。 通俗的来讲莱茨狗是百度基于区块链技术实现的一个大家养狗的游戏,当然这狗是虚拟的,说白了你就是收藏一些狗狗的照片。 2018年2月04日才正式推出,但是百度并不是第一家做这种游戏的公司,2017 年 12 月初,基于以太坊平台的应用 CryptoKitti...

2018-03-06 15:55:11

ZeroMQ学习 (十)ROUTER-DEALER

ROUTER-DEALER​ ZMQ_ROUTER类型的套接字是请求/回复模式的一种升级。​ 当ZMQ_ROUTER收到一个消息的时候,会自动在消息前面添加一帧,这一帧用来识别发送端的地址。​ 当发送一个消息的时候,需要先发送一帧对端的地址,然后再发送消息,如果目的地址指向的对端不存在了,这个消息就会被丢弃。​ 对端的地址默认情况下由ZMQ来产生一个唯一标识UUID。​ ​ ROUTER源码://...

2018-03-04 11:27:41

ZeroMQ学习 (九)zmq_poll使用

11 zmq_poll使用​ 每一个zmq的套接字也可以认为是一路IO,那么在多路IO读写的时候,我们可以使用zmq_poll进行IO复用,使用了zmq_poll()函数,当收到了消息的第一帧时,其它帧其实也已经收到了。订阅者代码如下:​#include <zmq.h>#include <stdio.h>#include <unistd.h>#inclu...

2018-03-04 11:26:36

ZeroMQ学习 (八)PAIR-PAIR

10 PAIR-PAIR​ 线程间通信的时候,最好使用,PAIR-PAIR模式进行通信。你可以让信号发送方使用PUSH,接收方使用PULL,这看上去可能可以,但是需要注意的是,PUSH套接字发送消息时会进行负载均衡,如果你不小心开启了两个接收方,就会“丢失”一半的信号。而PAIR套接字建立的是一对一的连接,具有排他性。可以让发送方使用DEALER,接收方使用ROUTER。但是,ROUTER套接字会...

2018-03-04 11:25:48

ZeroMQ学习 (七) 多帧消息

9 多帧消息​ ZMQ消息可以包含多个帧,这在实际应用中非常常见.​ 多帧消息的每一帧都是一个zmq_msg结构,也就是说,当你在收发含有五个帧的消息时,你需要处理五个zmq_msg结构。你可以将这些帧放入一个数据结构中,或者直接一个个地处理它们。下面的代码演示如何发送多帧消息:zmq_msg_send (&message, socket, ZMQ_SNDMORE);...zmq_ms...

2018-03-04 11:25:05

ZeroMQ学习 (六) 信号中断的处理

8 信号中断的处理​ 现实环境中,当应用程序收到Ctrl-C或其他诸如ETERM的信号时需要能够正确地清理和退出。默认情况下,这一信号会杀掉进程,意味着尚未发送的消息就此丢失,文件不能被正确地关闭等。​ 在C语言中我们是这样处理消息的:interrupt: Handling Ctrl-C cleanly in C发布者代码://// Shows how to handle Ctrl-C//...

2018-03-04 11:24:23

ZeroMQ学习 (五)发布-订阅模式

7 发布-订阅模式​ 发布者不用管是否有订阅者,它只管不停的发布,也不用接受客户端的请求。多订阅者可以尝试链接发布者,来接受信息,但是不能往发布者发送请求。发布者源码:#include <zmq.h>#include <stdio.h>#include <unistd.h>#include <string.h>int main (void)...

2018-03-04 11:23:34

ZeroMQ学习 (四)请求-应答模式

6 请求-应答模式​ 请求-应答模式,REQ-REP必须同步的进行,即,REQ套接字必须先发送请求,然后等待应答;REP必须先接受请求,然后发送应答。一旦打乱这个顺序,将造成错误,套接字将无法继续工作。请求端源码request.cpp:​#include <zmq.h>#include <stdio.h>#include <unistd.h>#inclu...

2018-03-04 11:22:59

ZeroMQ学习 (三)核心消息模式

4 核心消息模式​ ZMQ会自动进行连接或重连;无论是发送消息还是接收消息,ZMQ都会先将消息放入队列中,并保证进程不会因为内存溢出而崩溃,适时地将消息写入磁盘;ZMQ会处理套接字异常;所有的I/O操作都在后台进行;ZMQ不会产生死锁。ZMQ的核心消息模式有:请求-应答模式 将一组服务端和一组客户端相连,用于远程过程调用或任务分发。发布-订阅模式 将一组发布者和一组订阅者相连,用于数据分发。管道模...

2018-03-04 11:22:00

ZeroMQ学习 (二) ZMQ与传统的TCP区别

3 ZMQ与传统的TCP区别​ 在连接两个节点时,其中一个需要使用zmq_bind(),另一个则使用zmq_connect()。通常来讲,使用zmq_bind()连接的节点称之为服务端,它有着一个较为固定的网络地址;使用zmq_connect()连接的节点称为客户端,其地址不固定。我们会有这样的说法:绑定套接字至端点;连接套接字至端点。端点指的是某个广为周知网络地址。​ ZMQ连接和传统的TCP连...

2018-03-04 11:21:07

ZeroMQ学习 (一)认识与安装

关于ZMQ1 简单介绍​ ZMQ(ØMQ、ZeroMQ, 0MQ)看起来像是一套嵌入式的网络链接库,但工作起来更像是一个并发式的框架。它提供的套接字可以在多种协议中传输消息,如线程间、进程间、TCP、广播等。你可以使用套接字构建多对多的连接模式,如扇出、发布-订阅、任务分发、请求-应答等。ZMQ的快速足以胜任集群应用产品。它的异步I/O机制让你能够构建多核应用程序,完成异步消息处理任务。ZMQ有着...

2018-03-04 11:20:12

skynet框架应用 (十二) snax框架

12 snax框架​ snax 是一个方便 skynet 服务实现的简单框架。(简单是相对于 skynet 的 api 而言)​ 使用 snax 服务先要在 Config 中配置 snax 用于路径查找。每个 snax 服务都有一个用于启动服务的名字,推荐按 lua 的模块命名规则,但目前不推荐在服务名中包含"点" (在路径搜索上尚未支持 . 与 / 的替换)。在启动服务时会按查找路径搜索对应的文...

2018-03-04 11:11:17

skynet框架应用 (十八) http协议的服务

18 http协议的服务​ http协议的服务分为http服务端与http客户端,skynet服务作为http服务端的时候,可以像其他的web服务器一样,接收http请求并给与应答。skynet的服务作为http客户端的时候,可以通过http协议像远端发送请求并等待得到应答。18.1http服务端​ skynet 从 v0.5.0 开始提供了简单的 http 服务器的支持。skynet.httpd...

2018-03-04 11:07:56

skynet框架应用 (十七) protobuffer

17 protobuffer​ 假如我们要建立的skynet服务器与客户端的连接方式为长连接,且选择了Google的Protobuf来定制我们的网络协议,那么,接下来我们要解决的问题就是:如何在skynet框架中使用socket+protobuf。​ 由于protobuf的lua版本的支持存在着部分缺陷,为了避免踩坑,这里我们直接使用云风博客中推荐的pbc动态proto解析库。17.1 安装PBC...

2018-03-04 11:03:59

skynet框架应用 (十六) mysql

16 mysql​ skynet封装了mysql的驱动,主要文件为 lualib/skynet/db/mysql.lua。先在ubuntu下安装mysqlsudo apt-get install mysql-server设置mysql的用户密码为root 123456,并且创建一个skynet数据库。16.1 连接mysql连接mysql的APIlocal skynet = require "...

2018-03-04 11:03:02

skynet框架应用 (十五) msgserver

15 msgserver​ snax.msgserver 是一个基于消息请求和回应模式的网关服务器模板。它基于 snax.gateserver 定制,可以接收客户端发起的请求数据包,并给出对应的回应。​ 和 service/gate.lua 不同,用户在使用它的时候,一个用户的业务处理不基于连接。即,它不把连接建立作为用户登陆、不在连接断开时让用户登出。用户必须显式的登出系统,或是业务逻辑设计的超...

2018-03-04 11:02:01

skynet框架应用 (十四) 登录服务

14 登录服务​ 现在的网络游戏大部分是需要登录的,一般会有一个专门的登录服务来处理,登录服务要解决的问题:1、用户登录信息保密工作。2、实际登录点分配工作。14.1 加密算法14.1.1 DHexchange密钥交换算法​ DHexchange密钥交换算法主要用来协商一个服务器与客户端的密钥。云风已经帮我们封装好了这个加密方法,可以直接这么使用:package.cpath = "luaclib...

2018-03-04 10:58:55

skynet框架应用 (十三) 网关服务

13 网关服务​ skynet 提供了一个通用模板 lualib/snax/gateserver.lua 来启动一个网关服务器,通过 TCP 连接和客户端交换数据。​ TCP 基于数据流,但一般我们需要以带长度信息的数据包的结构来做数据交换。gateserver 做的就是这个工作,把数据流切割成包的形式转发到可以处理它的地址。local gateserver = require "snax.ga...

2018-03-04 10:45:23

skynet框架应用 (十一) 域名查询

11 域名查询​ 在 skynet 的底层,当使用域名而不是 ip 时,由于调用了系统 api getaddrinfo ,有可能阻塞住整个 socket 线程(不仅仅是阻塞当前服务,而是阻塞整个 skynet 节点的网络消息处理)。虽然大多数情况下,我们并不需要向外主动建立连接。但如果你使用了类似 httpc 这样的模块以域名形式向外请求时,一定要关注这个问题。​ skynet 暂时不打算在底层实...

2018-03-04 10:33:24

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!