如何在php和boost库之间进行通信?

前端之家收集整理的这篇文章主要介绍了如何在php和boost库之间进行通信?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有客户端和服务器在PHP通过共享内存通信,现在我想访问这个shred内存对象使用Boost.Interprocess如何访问它?
server.PHP
function create_image($str){
  // Create a blank image and add some text
  $im = imagecreatetruecolor(300,20);
  $text_color = imagecolorallocate($im,233,14,91);
  $stringBanner=exec("date").$str;
  imagestring($im,1,5,$stringBanner,$text_color);

  ob_start();
   imagejpeg($im);
  $i = ob_get_contents();
  ob_get_clean(); 
  imagedestroy($im);
   return $i; 
  }  
  echo "\n".__FILE__."\n";
  $shm_key = ftok(__FILE__,'t');
  echo $shm_key."\n";


  $shm_id = shmop_open($shm_key,"a",0); 
 if ($shm_id) {
  //it is already created
  shmop_delete($shm_id);
  shmop_close($shm_id); 
 } 
 //you need to create it with shmop_open using "c" only
 echo "try to create\n";
 if(!$shm_id = shmop_open($shm_key,"c",0777,1024*4))exit(-1);


 echo "ID ".$shm_id."\n";
 $i=0;
 for(;;){
 sleep(1);
 $s="i=".$i++;
 $str=$i;
 $im=serialize(create_image($str));

 $data=serialize(strlen($im));
 $shm_bytes_written = shmop_write($shm_id,$data,0);
 $shm_bytes_written = shmop_write($shm_id,$im,32);
 echo $shm_bytes_written." bytes  is written: ".$s." ID = $shm_id\n";
}

client.PHP

<?PHP
$shm_key =1946222626;// ftok(__FILE__,'t');
$shm_id = shmop_open(
         $shm_key,0644,1024*4
         );


 $s=shmop_size($shm_id);
 $data = unserialize(
        shmop_read( $shm_id,31)
       );

 $im =  unserialize(
       shmop_read( $shm_id,32,$data)
       );
  // Set the content type header - in this case image/jpeg
 header('Content-Type: image/jpeg');
// Output the image
echo $im;

我应该提供什么样的关键技术来提升这个记忆区域?

boost_client.cpp

#include <boost/interprocess/shared_memory_object.hpp> 
#include <iostream> 
#include "sys/msg.h"

int main() 
{ 
    int msqid;
    key_t key;
    char f[]="??????";
    int mid;

    //key = ftok(,'t');
    //msqid = msgget(key,0666 | IPC_CREAT);

    std::cout<<msqid<<std::endl;
    boost::interprocess::shared_memory_object 
    shdmem(boost::interprocess::open_or_create,f,//"shmem_server",boost::interprocess::read_write); 
    shdmem.truncate(1024); 
    std::cout << shdmem.get_name() << std::endl; 
    boost::interprocess::offset_t size; 
    if (shdmem.get_size(size)) 
    std::cout << size << std::endl; 
}

编辑:

那么我在Boost IPC库中找到了解决方案文档:

XSI_KEY based example from boost Docs

我不是你在做什么的专家,但是从我在问题和我的知识中读到的东西,我会把那个纯IPC的东西放到 ZMQ(你会发现你需要的每个语言的包装器).这意味着要解决这些问题,并提供可以运行在IPC或更常见的TCP套接字上的单一API.
原文链接:https://www.f2er.com/php/140047.html

猜你在找的PHP相关文章