当前位置: 首页 > 软件库 > 服务器软件 > HTTP服务器 >

GuaikNet

可配置微服务的 HTTP 网络服务端程序
授权协议 未知
开发语言 Python SHELL
所属分类 服务器软件、 HTTP服务器
软件类型 开源软件
地区 国产
投 递 者 公孙志
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

GuaikNet-怪客网络

可配置微服务的HTTP网络服务端程序

安装说明:(CentOS7)

yum -y install epel-release
yum -y install git
yum -y install python-tools
yum -y install python-pip
pip install --upgrade pip
pip install tornado
pip install gevent
pip install pika

pip install pymongo
pip install redis

git clone https://github.com/guaik/GuaikNet.git
cd ./GuaikNet
chmod +x ./start.sh
./start.sh

# 如果显示如下信息,证明已经成功安装并运行
# **********************************
# @ Welcome to use <GuaikNet> system
# @ website: https://bbs.guaik.org
# @ email  : luting.gu@gmail.com
# **********************************

系统测试:

安装requests库

pip install requests

将项目根目录下的client.py文件复制到测试电脑,修改client.py中的http://localhost:8080,将其中的localhost改成你部署GuaikNet项目所在的服务器 地址。

然后运行:python ./client.py

如果返回Welcome to use GuaikNet system则说明系统运行正常。

使用说明

GuaikNet的工作目录有两个,分别是http请求的处理目录./works和rpc的工作目录./rpc

HTTP请求协议:

示例:{"protocol":"json","version":"v1.01","action":"guaik.welcome","content":{}}

protocol: 请求协议 选项:[json, aes, rsa] (当前只使用json,aes加密和rsa加密方式还未加入)。

version : 版本号,如果客户端发起请求所使用的版本号与服务器当前版本号不同,服务端将不处理请求。

action : 需要调用的服务,命名规则是以works目录为根目录: 子目录.文件名。以上面的请求"action":"guaik.welcome"为例, 将会调用guaik目录下模块名为welcome的处理函数。

content : 该字段为自定义字段,按照服务端的开发文档填写。

HTTP处理例程:(./works/guaik/welcome.py)

def handler(data,ctx):
    ctx.write("Welcome to use GuaiKNet system")

处理例程函数定义统一写成:def handler(data,ctx): pass,否则无法被系统解析。

参数:data 对应着客户端请求content字段

参数:ctx http请求的上下文,通过该对象的write方法可以向客户端返回处理结果。

RPC调用说明:

需要安装RabbitMQ消息队列,一键安装脚本:

curl -s -o rabbitmq.py https://raw.githubusercontent.com/guaik/GuaikInstaller/master/rabbitmq.py && python rabbitmq.py install

RPC功能默认是关闭的,需要在./bootstrap.py文件中开启该功能:

server.active_rpc("rpc_host", 5672, "/", "username", "passwd")

找到该行,取消注释,填上消息队列的:(主机IP, 主机端口, 虚拟主机(vhost), 用户名, 密码)

RPC处理例程的默认目录为:./rpc

RPC处理例程调用规则:(以下是发送短信验证码的DEMO)

from server.application import gm
rpc = gm.get("rpc")
rpc.call("sms.send_verify_code", "+8618888888888")

从全局对象管理器(gm)中取出rpc对象,使用rpc对象的call方法,第一个参数是rpc的方法名,之后所有的参数是rpc方法对应的参数列表。原型为: def call(self,key,*args): ...

方法名的规则是:模块名.函数名

RPC方法定义规则:(以./rpc/sms.send_verify_code为例)

import logging
import requests
import json
from server.application import gm
rpc = gm.get("rpc")

api_key = "your_api_key"
api_secret = "your_secret"
brand = "Guaik"

@rpc.route()
def send_verify_code(number):
    request_id = None
    try:
        data = {"api_key":api_key,"api_secret":api_secret,"number":number,"brand":brand}
        headers = {'Content-Type': 'application/json'}
        r = requests.post("https://api.nexmo.com/verify/json",headers = headers, data = json.dumps(data))
        data = json.loads(r.text)
        if data["status"] == "0":
            request_id = data["request_id"]
    except Exception as e: logging.error(e)
    return request_id

先从全局对象管理器gm中取出rpc对象,然后在send_verify_code的上方加上@rpc.route()注解,这时候send_verify_code将被注册到RpcManager中, 成为RPC处理例程。

其他说明:

./bootstrap.py:

LEVEL :当前服务器日志级别,作为Server的初始化参数传入。

CUR_VERSION :当前解析器的版本号,作为Analysis的参数传入,用于判断客户端发送的请求版本是否正确。

server.gen_http_process(8080,1,Analysis(CUR_VERSION)): 以上代码生成http服务进程,默认监听8080端口。1代表启动一个进程,如果该参数为4,则启动4进程依次监听8080,8081,8082,8083端口。 第三个参数传入解析器对象,该对象用于解析客户端请求并调用对应的处理例程,在该例程中存放着请求与处理例程的映射关系。也可以自定义解析器对象, 基类在./base/analysis.py中。

server.start(False): 这边的False表示不以守护进程运行,如果需要以守护进程运行,则修改成True即可,守护进程默认只在Linux系统中生效。

./config目录下存放着可能会用到的配置文件,proxy.conf为Nginx反向代理的配置文件,可以修改它并将它放到/etc/nginx/conf.d下, 然后重启Nginx服务使其生效。可以通过监听多个服务端口,配合Nginx实现服务端的多进程处理。

upstream servers {
    server localhost:8001;
    server localhost:8002;
    server localhost:8003;
    server localhost:8004;
}

server {
    listen 8080;
    location / {
        proxy_pass  http://servers;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_redirect off;
        # Socket.IO Support
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
   }
}

PS:打了这么多字应该会有错别字,欢迎纠正:luting.gu@gmail.com

 相关资料
  • 主要内容:一、网络的整体架构,二、服务端的流程,三、源码分析,四、总结一、网络的整体架构 在前面介绍Redis的整体流程时,初步介绍过服务端的网络代码,现在先看一下整体的架构: 1、服务处理(EPoll) 如果没有接触过网张编程的,特别是对LINUX上的编程模型一点都不清楚的。这块可能是个麻烦.Redis为了保证在不两同的平台的高效可行的运行,采用了在不同平台自适应使用不同的网络编程模型,这其中包括一些可能比较专用的平台,如Solaries10中的 evport,m

  • UNIX系统有一个记录标准服务的数据库,这个数据库由头文件/etc/services或域名服务器提供。 关键头文件 netdb.h 关键结构体 struct servent /* server entry的缩写 */ { char *s_name; /* 服务程序的正式名字 */ char *s_alises;/* 服务程序的别名,为一字符串数组,空指针标志该数组结束 *

  • 网络服务提供弹性公网IP、NAT网关、DNS解析等功能。 弹性公网IP 弹性公网IP(Elastic IP)是一种NAT IP,通过与虚拟机绑定,将弹性公网IP与虚拟机的私有地址进行NAT映射,实现虚拟机与公网之间的通信。 NAT网关 NAT网关能够为公有云VPC网络中虚拟机提供IP地址转换功能,使虚拟机可以访问外网或提供互联网服务。 DNS解析 DNS解析用于将简单好记的域名解析为计算机用于通信

  • 我一直试图让spark在我的本地机器上运行kubernetes。然而,我在试图理解服务网络是如何工作的方面遇到了一个问题。 我在笔记本电脑上用容器运行kubernetes: null kubectl create-f Kubernetes/examples/spark/spark-master-controller.yaml kubectl create-f Kubernetes/examples

  • Twisted Twisted 是一个事件驱动的网络引擎。他可以被用来构建多种网络协议的应用程序,包括:HTTP 服务器和客户端;使用 SMTP、POP3、IMAP 或者 SSH 协议测应用程序和 IM (即时消息)等应用 更多。 PyZMQ PyZMQ 是 ZeroMQ 的 Python 绑定。ZeroMQ 是一个高性能的异步消息库,它的一个很大的优势在于其可以被用作一个消息队列而不需要消息代理

  • 当我们部署到pcf时,Netflix eureka、zuul、ribbon、feign spring cloud配置不有用?(如果是,在pcf中有哪些可选方案以及如何配置它们?) 由于构建微服务遵循CI/CD方法,开发人员在推送代码之前如何验证其微服务的工作,因为我们在生产PCF中没有使用eureka、zuul、ribbon、feign。(如何在developer Machine中模拟pcf环境?

  • 在 Polar Flow 网络服务中,您可以详细规划和分析训练,并进一步了解您的表现。 您可以通过电脑在 flow.polar.com/start 上设置 Verity Sense。在此处您将在相关指导下下载并安装 FlowSync 软件以便在传感器与网络服务之间同步数据,您还可创建网络服务的用户账户。如果您使用移动设备和 Polar Flow 应用进行设置,您可以利用在设置期间创建的密码登录 F

  • 在 Polar Flow 网络服务中,您可以详细规划和分析训练,并进一步了解您的表现。通过添加运动内容并编辑它们的设定,您可以设置和自定义手表,以完美配合您的训练需求。您也可以在 Flow 社区中与好友分享训练亮点、报名参加俱乐部的课程,以及取得跑步赛事的个性化训练计划。 Polar Flow 网络服务还显示您的日常活动目标完成百分比以及活动详情,并帮助您了解您的日常习惯与选择如何影响您的健康。