动用workerman火速进展RPC开发的覆辙,固定柳州

by admin on 2019年1月31日

网络通讯进程中,可能会并发分包和合包的动静。具体情状如

前言:

动用workerman火速进展RPC开发的覆辙,固定柳州。Memcached与Memcache的区别

有关Memcached和Memcache的界别,其实很粗略,一个是服务端,一个是客户端,就像是mysql一样,我们在指令行里输入各样sql语句就能查询到须求的结果,那就是客户端,客户端接收大家输入的吩咐从服务端查询,mysqld就是服务端,就是响应客户端的额后台进度,在那边也同样Memcached是服务端,而Memcache就是客户端。

由此大家要使用Memcached,首先在服务端安装好Memcached,并运行Memcached,然后安装Memcache就能使用了。

安装MySQL:
假如没有安装MySQL,则须要先安装。
Centos7之前:

往日大家曾经不难的垂询了弹指间『远程调用PRC』
1.Socket学习 –
撕开长途调用的逼分外衣(上)
2.Socket学习 –
撕开长途调用的逼卓绝衣(下)超不难仿制一个RPC客户端
bf88必发唯一官网 1

1.解包封装的艺术 

设置表明:

需安装

  1. 服务端(memcached)
  2. 客户端(libmemcached)
  3. php的memcache扩展

安装服务端
brew install memcached

测试memcached安装是或不是成功
ls -al /usr/local/bin/mem*

启动memcached服务(关于各参数可知详尽表明)
memcached -d

动用workerman火速进展RPC开发的覆辙,固定柳州。一经急需开机自启动,输入以下命令
ln -sfv /usr/local/opt/memcached/*.plist ~/Library/LaunchAgents


设置客户端
brew install libmemcached


php的memcache扩展

  • 下载稳定版的memcache包
    地址:http://pecl.php.net/package/memcache
  • 解压
    tar -xzf memcache-2.2.7.tgz
  • 编译

$ cd memcache-2.2.7  
$ phpize  
$ ./configure --enable-memcache --with-php-config=/usr/local/opt/php54/bin/php-config --with-zlib-dir  
$ sudo make & make install  

注:如果有发出以下的题材(php7环境)

fatal error: 'ext/standard/php_smart_str.h' file not found

git clone
https://github.com/php-memcached-dev/php-memcached.git
cd php-memcached/
git checkout php7
phpize
./configure –disable-memcached-sasl
–with-libmemcached-die=/usr/local/libmemcached
make && make instal

可参考:http://www.cnblogs.com/zqifa/p/linux-php-2.html

安装已毕之后

将路径设置在php.ini文件的extension_dir参数 (我这边默许的so文件是在
/usr/lib/php/extensions/no-debug-non-zts-20121212/)

bf88必发唯一官网 2

image.png

php.ini(我那边地址是 /usr/local/etc/php/7.0/php.ini )添加参数:

extension_dir="/usr/local/Cellar/php70/7.0.14_7/lib/php/extensions/no-debug-non-zts-20151012/"
extension=memcached.so

  • 重启php-fpm

$ killall php-fpm  
$ /usr/local/opt/php54/sbin/php-fpm -D

重启nginx

$ nginx -s reload  
sudo yum install mysql-server
sudo service mysqld start

二、

前几天来学学一下workerman那一个框架上的别样使用『Json Rpc远程调用框架』,
下载地址:
介绍:

JSON (JavaScript Object
Notation)是一种用于在组件间相互音信的数据交流格式,其是以JavaScript
为根基的数据表示语言。既有利于于人的读写习惯,又利于统计机的辨析和生成。
RPC(Remote Procedure
Call)是远程调用,既客户端通过某种协议向服务器发起呼吁并赢得结果。RPC使得开发分布式互连网程序相当便宜,并且能大幅度限度的将网络种类的依次部分解耦,方便后续开发、维护。
workerman-json-rpc是一个以workerman作为服务器容器,使用Json作为协商简单高效的RPC远程调用框架。

bf88必发唯一官网 3
下载解压之后目录结构如下图,大家把JsonRpcStatistics
那2个目录的一体拷贝到 大家团结的花色中。
bf88必发唯一官网 4
拷贝到jsonrpc 文件夹中,workerman
目录仍然咱们最原始是workerman大旨包。

1.新建allserver.phpbf88必发唯一官网, 来作为我们的服务端:

<?php

//引入Workerman核心包
require_once 'workerman/Autoloader.php';
//引入jsonRpc
require_once 'jsonrpc/JsonRpc/start.php';

启动:

php allserver.php  start

bf88必发唯一官网 5

2.客户端
大家在此外一个网站(客户端)来调用大家服务端。
因为大家服务端使用的是『workerman-json-rpc』这一个插件,其中也卷入了客户端的代码。
我们把JsonRpc/Clients/PrcClient.php文本拷贝到我们的客户端项目,然后新建一个test.php文件来测试
bf88必发唯一官网 6
test.php:

<?php

require_once 'RpcClient.php';

 // 服务端列表
$address_array = array(
    'tcp://10.211.55.13:2015', //我们只有一个服务
);
// 配置服务端列表
RpcClient::config($address_array);

$uid = 567;
$user_client = RpcClient::instance('User'); 
//这个User是服务端的类,在JsonRpc/Services/User.php

//调用User类中的方法
var_dump($user_client->getEmail(123));

bf88必发唯一官网 7

3.再次来到服务端,新建新闻服务News.php
bf88必发唯一官网 8
可以看出,默许有Blog类和User类(前边我们曾经在客户端调用过)。

在服务端新建了一个News 服务后,不需求重启服务(不须求再一次实施 php
allserver.php start)。

来到客户端测试:

<?php

require_once 'RpcClient.php';

 // 服务端列表
$address_array = array(
    'tcp://10.211.55.13:2015', //我们只有一个服务
);
// 配置服务端列表
RpcClient::config($address_array);

//客户端调用新闻服务
$client = RpcClient::instance('News');
var_dump($client->getTodayNews());

bf88必发唯一官网 9

communicationPack.php

<?php
//对数据信息封装
function packData($sendData,$packModel){
    return pack($packModel, strlen($sendData)).$sendData;
}

//解包
function unpackData($rcvData,$packModel){
    $length = $packModel=='N'?4:2;
    return substr($rcvData,$length);
}

Centos7使用了玛丽亚DB替代,完全包容MySQL:

2.服务端 tcpServer.php

sudo yum install mariadb-server
sudo systemctl enable mariadb
sudo systemctl start mariadb
<?php
require_once 'communicationPack.php';
$packModel = 'N';
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'open_length_check' => true,
    'package_max_length' => 2000000,
    'package_length_type' => $packModel, //see php pack()
    'package_length_offset' => 0,
    'package_body_offset' => $packModel=='N'?4:2,
));
//监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
    echo "Client: Connect.\n";
});

//监听数据接收事件
$serv->on('receive', function ($serv, $fd, $from_id, $data) use($packModel){
    echo "#{$serv->worker_id}>> received length=" . strlen($data) ."data=".$data. "}\n";
    $data = unpackData($data,$packModel);
    $returnStr = "Server: ".$data;
    $serv->send($fd, packData($returnStr,$packModel));
});

//监听连接关闭事件
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});

//启动服务器
$serv->start();

若果照旧想使用MySQL:

起步服务端

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
sudo yum install mysql-server
sudo systemctl start mysqld

bf88必发唯一官网 10

服务端:
安装源:
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
查看源:
ll /etc/yum.repos.d/
安装:
yum install zabbix-server-mysql zabbix-web-mysql
在MySQL中新建名为zabbix的库:
mysql -uroot
create database zabbix character set utf8 collate utf8_bin;
quit;
往名为zabbix的库中导入数据:
cd /usr/share/doc/zabbix-server-mysql-3.2.0
zcat create.sql.gz | mysql -uroot zabbix
编辑zabbix服务端配置文件:

 

# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=root

3 客户端 tcpClient.php

修改php.ini:

<?php
require_once 'communicationPack.php';
$packModel = 'N';
$client = new swoole_client(SWOOLE_SOCK_TCP);
$client->set(array(
    'open_length_check'     => true,
    'package_length_type'   => $packModel,
    'package_length_offset' => 0,       //第N个字节是包长度的值
    'package_body_offset'   => $packModel=='N'?4:2,       //第几个字节开始计算长度
    'package_max_length'    => 2000000,  //协议最大长度
));
//连接到服务器
if (!$client->connect('127.0.0.1', 9501, 0.5))
{
    die("connect failed.");
}
//向服务器发送数据
//数据协议
$sendData = "test123";
$sendData = packData($sendData,$packModel);
if (!$client->send($sendData))
{
    die("send failed.");
}
//从服务器接收数据
$data = $client->recv();
if (!$data)
{

    die("recv failed.");
}
echo unpackData($data,$packModel);
//关闭连接
$client->close();
vi /etc/php.ini
date.timezone=Europe/Riga

 然后开行客户端

启动zabbix服务端:
systemctl start zabbix-server
启动htppd:
systemctl start httpd

bf88必发唯一官网 11

安装zabbix客户端:
在客户端机器上安装源。若是要监督服务端所在机器,在服务端机器上也设置客户端:
rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm
安装:
yum install zabbix-agent
修改客户端配置文件:

劳动端会打印

vim /etc/zabbix/zabbix_agentd.conf
Server=yourserverhost
Hostname=yourclientname

bf88必发唯一官网 12

启动zabbix客户端:
service zabbix-agent start

pack N是将数据转成了无符号32位的数字,那么些刚好长度是4个字节,所以设定

安装zabbix get:
在zabbix服务端安装zabbix get:
yum install zabbix-get
测试获取zabbix客户端的数码:
zabbix_get -s yourclienthost -p 10050 -k "system.uname"
zabbix_get -s yourclienthost -p 10050 -k "system.cpu.load"

package_body_offset=4

登录zabbix:
默认的账户名:Admin, 密码zabbix
添加客户端:
Configuration 》Hosts

 

bf88必发唯一官网 13

点击边上的Templates,在搜索框查询你要的模版,点击add添加模板,再点击最下的Add/Update添加或更新Host。然后就观望的拉长的客户端。

bf88必发唯一官网 14

bf88必发唯一官网 15

查看Graphs,在右上角接纳要翻开的host。

bf88必发唯一官网 16

安装Grafana:
安装:

grafana-cli plugins list-remote
grafana-cli plugins install alexanderzobnin-zabbix-app
service grafana-server restart

打开web:
http://yourserverhost:3000/login
,默认用户名:admin, 密码:admin。
enable zabbix插件:
点击enable即可。

bf88必发唯一官网 17

加上数据源:
Url的host就是zabbix服务端的地址
http://yourserverhost/zabbix/api\_jsonrpc.php

用户名密码就是zabbix的用户名密码

bf88必发唯一官网 18

bf88必发唯一官网 19

添加Dashboard:
点击 Add Panel 》Graph
接下来下图的点击Panel Title 》edit 进行安装

bf88必发唯一官网 20

bf88必发唯一官网 21

bf88必发唯一官网 22

bf88必发唯一官网 23

下一篇介绍zabbix的用户管理,主/被动格局,trigger设置,和报警。


参考:
https://www.zabbix.com/documentation/3.2/manual/installation/install\_from\_packages
http://www.cnblogs.com/yyhh/p/4792830.html
http://docs.grafana-zabbix.org/installation/
http://www.zabbix.org.cn/viewtopic.php?f=12&t=95
http://www.fantansy.cn/index.php/linux/266.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图