linux go 环境

1、下载地址(自备梯子):https://golang.org/dl/

2、解压 到指定目录 tar -C /usr/local -zxf go1.12.1.linux-amd64.tar.gz

3、声明 root 用户登录。
$ vim /etc/profile
打开/etc/profile后//最后一行插入
export GOROOT=/usr/local/go //这里我的go解压后是在/user/local/go
export GOPATH=~/golib:~/goproject
export GOBIN=~/gobin
export PATH=$PATH:$GOROOT/bin:$GOBIN

/然后 按ESC键 跳到命令模式,然后保存退出
:wq //再按确认键盘
//输入下面才会命令生效
$ source /etc/profile //ok

4、go version

go version go1.12.1 linux/amd64

 

 

 

讲解C栈和PHP递归调用push和pop stack的过程。

https://biglive.xueersi.com/LivePlayBack/index/2-2480-93250

讲解C栈和PHP递归调用push和pop stack的过程。

这个视频内容可以和 Swoole4 协程结合着看。很透彻地把 Swoole4 的实现原理讲明白了。普通的 PHP 程序就是一个 C栈、一个 PHP的栈。而 Swoole4 的协程,变成多个 C栈和PHP栈,可以在不同的栈之间切换,这就是协程的本质。然后底层又使用 Epoll 去做事件驱动,去实现协程调度。

粘包问题

网络协议为计算机网络中进行交互而建立的规则,标准或约定的集合

socket 通讯

socket屏蔽了底层通讯的机制

为了数据高效传输

协议分层

tcp/ip 协议族是一个四层协议系统,自底而上分别是数据链路层,网络层、传输层和应用层

应用层  ping  telnet OSPF DNS

要有应答,

收发有缓冲区

3.1什么是 TCP 粘包?

TCP 粘包是指发送方发送的若干包数据 到 接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

TCP通信特点

  1. TCP 是流式协议没有消息边界,客户端向服务器端发送一次数据,可能会被服务器端分成多次收到。客户端向服务器端发送多条数据。服务器端可能一次全部收到。

2.保证传输的可靠性,顺序。

3.TCP拥有拥塞控制,所以数据包可能会延后发送。

 

没有消息边界:

可以理解为水在一个水管里的流动,我们不知道哪段数据是一个我们需要的完整数据

 

收发有缓冲区:

比如:当水从一端流到了另一端,我们在收数据的时候,不可能每来一滴水就处理一次,这个缓冲区就相当于有了一个水桶,再接了一定的水之后内核再给数据交到用户空间,

3.3 Swoole怎么处理粘包

3.3.1、EOF 结束协议

通过约定结束符,来确定包数据是否发送完毕

开启open_eof_check=true,并用package_eof来设置一个完整数据结尾字符,同时设置自动拆分open_eof_split

 

注意:

  • 要保证业务数据里不能出现package_eof设置的字符,否则将导致数据错误了。

2、可以手动拆包,去掉open_eof_split,自行 explode(“\r\n”, $data),然后循环发送

3.3.2 固定包头+包体协议

这种方式也非常常见,原理是通过约定数据流的前几个字节来表示一个完整的数据有多长,从第一个数据到达之后,先通过读取固定的几个字节,解出数据包的长度,然后按这个长度继续取出后面的数据,依次循环。

 

案例:

 

 

相关配置:

open_length_check:打开包长检测特性

package_length_type:长度字段的类型,固定包头中用一个4字节或2字节表示包体长度。

package_length_offset:从第几个字节开始是长度,比如包头长度为120字节,第10个字节为长度值,这里填入9(从0开始计数)

package_body_offset:从第几个字节开始计算长度,比如包头为长度为120字节,第10个字节为长度值,包体长度为1000。如果长度包含包头,这里填入0,如果不包含包头,这里填入120

package_max_length:最大允许的包长度。因为在一个请求包完整接收前,需要将所有数据保存在内存中,所以需要做保护。避免内存占用过大。

package_length_type 长度值的类型

长度值的类型,接受一个字符参数,与php的pack函数一致。目前swoole支持10种类型:

c:有符号、1字节

C:无符号、1字节

s:有符号、主机字节序、2字节

S:无符号、主机字节序、2字节

n:无符号、网络字节序、2字节 (常用)

N:无符号、网络字节序、4字节 (常用)

l:有符号、主机字节序、4字节(小写L)

L:无符号、主机字节序、4字节(大写L)

v:无符号、小端字节序、2字节

V:无符号、小端字节序、4字节

服务端A既是客户端也是服务器,服务端A要发送请求到服务端B,然后服务端B返回消息给服务端A

 

 

udb 服务

<?php
/**
 * Created by PhpStorm.
 * User: zhangheg
 * Date: 2019/3/23
 * Time: 14:52
 */

$client = new Swoole\Client(SWOOLE_SOCK_UDP);
$client->sendto('127.0.0.1',9501,'客户端udp来了');
<?php
/**
 * Created by PhpStorm.
 * User: zhangheg
 * Date: 2019/3/23
 * Time: 17:45
 */
//创建Server对象,监听 0.0.0.0:9501端口
$serv = new swoole_server("0.0.0.0", 9501,SWOOLE_PROCESS,SWOOLE_SOCK_UDP);

$serv->set([
    'worker_num' => 1, //设置进程
    'heartbeat_check_interval'=>3, //心跳间隔时间
    'heartbeat_idle_time' => 15, //允许空闲时间 心跳的两倍,容错,允许一次丢包
]);


$serv->on('packet',function ($server,$data,$clientInfo){
    var_dump($data);
    var_dump($clientInfo);
    //$server->sendTo();
});
$serv->start();
class A{


    public function connect($serv, $fd){
        var_dump('classa连接');
        echo "有新的客户端连接,连接标识为$fd" . PHP_EOL;
    }
}

centos php7 swoole编译安装

1、安装编译所需扩展

yum -y  install  gcc  gcc-c++ libxml2-devel m4 autoconf pcre-devel make cmake bison openssl openssl-devel wget

2、下载

Wget  http://cn2.php.net/distributions/php-7.2.15.tar.gz

3、解压

tar -zxf

4、configure 生成安装文件

在安装包下面一般有个configure, 是用来生成 Makefile,为下一步的编译做准备,你可以通过在 configure 后加上参数来对安装进行控制,具体可以通过configure  –help 查看相应的命令,这里只指定了php目录跟配置文件目录,开放了其中一部分扩展

./configure --prefix=/usr/local/php
--prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc
-with-libxml-dir=/usr
--with-mhash --with-openssl
--with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd
--with-zlib
--enable-zip
--enable-inline-optimization
--disable-debug
--disable-rpath
--enable-shared
--enable-xml
--enable-bcmath
--enable-shmop
--enable-sysvsem
--enable-mbregex
--enable-mbstring
--enable-pcntl
--enable-sockets
--without-pear
--with-gettext
--enable-session

 

5、 make && make install 安装

6、CentOS下将php和mysql命令加入到环境变量中

在centos7.2当中就可以使用下面的方式进行添加

Vim /etc/profile文件

添加一行

pathmunge  /usr/local/php/bin

然后执行source /etc/profile 让当前的配置生效

7、最后配置文件拷贝到指定的目录

php -i | grep Configuration 查询配置文件目录

将源码当中的配置文件指定到相应的目录

cp php.ini-development  /usr/local/php/etc/php.ini

Swoole安装方式跟php安装方式是一样的,下载解压、编译

wget  https://pecl.php.net/get/swoole-4.2.13.tgz

tar -zxf

phpize

./configure

make && make install

php.ini添加

extension=swoole.so

阿里云服务器 安装 elasticsearch

环境:Ubuntu14.04

下载地址:https://www.elastic.co/cn/downloads/elasticsearch

  • 安装jdk
    1. wget –no-cookies –no-check-certificate –header “Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie” “http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz”
    2. cp  jdk-8u141-linux-x64.tar.gz /usr/local/software //文件夹不存在创建
    3. tar -zxvf jdk-8u141-linux-x64.tar.gz  //解压文件
    4. 设置环境变量

elasticsearch

http://www.ruanyifeng.com/blog/2017/08/elasticsearch.html

https://github.com/bupt1987/html-parser

http://www.cnblogs.com/tudou1223/p/6877344.html

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.3.0/elasticsearch-analysis-ik-6.3.0.zip

win7 Ubuntu 14.04共享文件夹,安装vmtools

1.修改虚拟机 cd/dvd IOS 映像文件到 虚拟机安装目录下的 linux.iso

2. 挂载目录 /mnt/cdrom# mount -t iso9660 -o,loop /dev/sr0 /mnt/cdrom

3.  cp VMwareTools-10.0.10-4301679.tar.gz /home/vmtools.tar.gz

4  解压 tar -zxvf vmtools.tar.gz

5 进入vmware-tools-distrib目录,执行该目录下的vmware-install.pl。

6 rebort 重启

mkdir data

cd data

ln -s /mnt/hgfs/wwwroot/ /data 软连接

1. vmware-hgfsclient 命令查看当前有哪些共享的目录,这里我只使用了shared文件夹
2. 使用 mount -t vmhgfs .host:/shared /mnt/hgfs 命令挂载该共享文件夹(注意:带.号的哦),其中.host:/Documents是共享名,只需把Documents换成
使用vmware-hgfsclient 命令得到的目录,/mnt/hgfs是挂载点
3. 到此为止是可以使用该共享文件夹了,但每次都得重复mount一次,所以需要设置为随机启动后自动挂载
编辑 /etc/fstab,添加下面一行
.host:/shared /mnt/hgfs vmhgfs defaults 0 0 (按需写)

补充:
如果显示
Error: cannot mount filesystem: No such device
ubuntu则先执行 sudo apt-get install open-vm-dkms
如果是centos安装过VM tool的话直接运行命令:sudo vmhgfs-fuse .host:/share /mnt/hgfs 然后就有了,

其中 host:/share 中的share是共享名,可以通过命令:vmware-hgfsclient 查看
———————
作者:roodyszz2013
来源:CSDN
原文:https://blog.csdn.net/roodyszz2013/article/details/56276173/
版权声明:本文为博主原创文章,转载请附上博文链接!

swoole 初探

需要了解知识点

 

1、网络通信,异步,同步

Tcp:传输控制协议

IP:互联网协议

 

2、socket,什么是socket

两台机器想要通信必须遵守tcp/ip协议,udp属于其中一种

1)指定对方地址,

2)打开一个和对方的连接

3)把socket当成普通文件往里写数据

4)要是发现socket里又数据就读出来,必然是对方发送过来的

3、什么是websocket

网页游戏应用,

http协议缺陷通信只能又客户端发起,无法主动推送。不请求则不返回数据。

websocket

h5

socket = new WebSocket(“ws:20.20.0.23:9596”);

socket.onopen();

4、swoole

一个标准的PHP扩展,异步、并行、高效,纯c语言编写

PHP能快速创建资源,释放资源,支持多进程单不支持多线程。

环境 ubuntu14.04 PHP7 mysql

mkdir default

git clone https://github.com/swoole/swoole-src.git

apt-get install php-dev

切换到swoolle