行使workerman快捷拓展RPC开发的覆辙,互联网通讯协议

互联网通讯进度中,可能会晤世分包和合包的图景。具体情况如

前言:

Memcached与Memcache的区别

至于Memcached和Memcache的分裂,其实很简短,一个是服务端,一个是客户端,如同mysql一样,我们在指令行里输入各样sql语句就能查询到需求的结果,那就是客户端,客户端接收大家输入的通令从服务端查询,mysqld就是服务端,就是响应客户端的额后台进度,在此间也一如既往Memcached是服务端,而Memcache就是客户端。

因而我们要运用Memcached,首先在服务端安装好Memcached,并运行Memcached,然后安装Memcache就能动用了。

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

此前大家曾经简单的问询了须臾间『远程调用PRC』
1.Socket学习 –
撕开长途调用的逼卓越衣(上)
2.Socket学习 –
撕开长途调用的逼非凡衣(下)超简单仿制一个RPC客户端
www.5929.com 1

1.解包封装的方法 

设置表达:

行使workerman快捷拓展RPC开发的覆辙,互联网通讯协议。需安装

  1. 服务端(memcached)
  2. 行使workerman快捷拓展RPC开发的覆辙,互联网通讯协议。客户端(libmemcached)
  3. php的memcache扩展

安装服务端
brew install memcached

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

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

一经急需开机自启动,输入以下命令
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/)

www.5929.com 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

  • www.5929.com,重启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远程调用框架。

www.5929.com 3
下载解压之后目录结构如下图,大家把JsonRpcStatistics
那2个目录的全套拷贝到 大家自己的品类中。
www.5929.com 4
拷贝到jsonrpc 文件夹中,workerman
目录依然大家最原始是workerman大旨包。

1.新建allserver.php 来作为我们的服务端:

<?php

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

启动:

php allserver.php  start

www.5929.com 5

2.客户端
俺们在此外一个网站(客户端)来调用大家服务端。
因为我们服务端使用的是『workerman-json-rpc』这一个插件,其中也卷入了客户端的代码。
我们把JsonRpc/Clients/PrcClient.php文件拷贝到大家的客户端项目,然后新建一个test.php文件来测试
www.5929.com 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));

www.5929.com 7

3.赶回服务端,新建音信服务News.php
www.5929.com 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());

www.5929.com 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

www.5929.com 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

www.5929.com 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

www.5929.com 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

 

www.5929.com 13

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

www.5929.com 14

www.5929.com 15

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

www.5929.com 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即可。

www.5929.com 17

丰盛数据源:
Url的host就是zabbix服务端的地方
http://yourserverhost/zabbix/api\_jsonrpc.php

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

www.5929.com 18

www.5929.com 19

添加Dashboard:
点击 Add Panel 》Graph
下一场下图的点击Panel Title 》edit 举行安装

www.5929.com 20

www.5929.com 21

www.5929.com 22

www.5929.com 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

Leave a Comment.