官网
https://nanomsg.org/
源码下载
https://github.com/mkoppanen/php-nano
提前准备
你需要已经安装了nanomsg的库,php,和pkg-config,可能还有其他需要的东西,但是我没有遇到,遇到的问题可以留言讨论。
nanomsg库的安装方法可以查看另一篇文章
https://blog.csdn.net/andylauren/article/details/82818481
编译源码
首先看一下源码提供的README.md,其中有一些错误,我在这里
How to install
1.Install nanomsg library, see: https://github.com/nanomsg/nanomsg
1.安装nanomsg库
2.Install PHP dev tools for extension: sudo apt-get install php5-dev (for Debian/Ubuntu) or sudo yum install php-devel (Fedora)
2.需要安装php
3.Clone repo at your server, e.g. cd /var/tmp && git clone https://github.com/mkoppanen/php-nano.git
3.拷贝php-nano源码
4.cd /var/tmp/php-nano
4.这里我使用的是压缩包下载,所以我就直接进入文件夹即可。
5.phpize
5.使用phpize命令生成configure文件
6. ./configure
6.这里注意一个问题,需要将nanomsg.pc文件改名为libnanomsg.pc文件,我使用的是默认安装位置在/usr/local/lib/pkgconfig
否则会报错“error: Unable to find usable libnanomsg installation”
7.make
在这一步的时候需要将nanomsg库的头文件nn.h和pubsub.h复制到编译的include文件夹中,否则会报错这两个头文件找不到。
php_nano_private.h:38:16: fatal error: nn.h: 没有那个文件或目录
应该会有其他正规方法,但是我的这个方法好用。
8.sudo make install
这样nano.so的库就被安装在“Installing shared extensions: /usr/lib/php/20151012/”里了。
9.Edit your php.ini file, add extension=nano.so
9.在你的php.ini文件中添加外部库,如果是apache需要找到服务器的配置文件。
10.Restart FPM service or Apache web server.
!Note! tested with PHP 5.6.2 only ( PHP_VERSION : 5.6.9-0+deb8u1 ZEND_VERSION: 2.6.0 ). PHP must support Namespace (PHP 5 >= 5.3.0, see: http://php.net/manual/en/language.namespaces.php)
注意,需要php在5.3以上。
测试
在这个源码中有一个bus的例子,这个例子与c语言的bus例子一模一样,我们就使用这个做测试
在examples目录下
打开文件可以看到测试的方法
php -d extension=nano.so ./bus.php node0 node0 node1 node2 & node0=$!
php -d extension=nano.so ./bus.php node1 node1 node2 node3 & node1=$!
php -d extension=nano.so ./bus.php node2 node2 node3 & node2=$!
php -d extension=nano.so ./bus.php node3 node3 node0 & node3=$!
sleep 5
kill $node0 $node1 $node2 $node3
输出如下
SENDING 'node0' ONTO BUS
SENDING 'node2' ONTO BUS
node2: RECEIVED 'node0' FROM BUS
node0: RECEIVED 'node2' FROM BUS
SENDING 'node1' ONTO BUS
node1: RECEIVED 'node0' FROM BUS
node2: RECEIVED 'node1' FROM BUS
node1: RECEIVED 'node2' FROM BUS
node0: RECEIVED 'node1' FROM BUS
SENDING 'node3' ONTO BUS
node0: RECEIVED 'node3' FROM BUS
node1: RECEIVED 'node3' FROM BUS
node2: RECEIVED 'node3' FROM BUS
node3: RECEIVED 'node0' FROM BUS
node3: RECEIVED 'node2' FROM BUS
node3: RECEIVED 'node1' FROM BUS