zeromq中getSocket(type,persistence_id,callback)的目的是什么?
如果在上下文中不存在相同的persistence_id,它会创建一个新的套接字吗?
这是我的客户
function newSocket(ZMQSocket $soc, $pid) {
echo $pid;
}
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket');
$socket->setSockOpt(ZMQ::SOCKOPT_HWM,5);
$socket->connect("tcp://172.16.136.59:5555");
for($i=0;$i<10;$i++)
{
var_dump($socket->send("hai",ZMQ::MODE_NOBLOCK));
sleep(2);
}
有多少次我同时运行此客户端[第n个客户端启动后第n个客户端],回调正在执行。 这是理想的行为吗? 什么是所有情况,套接字结构将被重用?
答案 0 :(得分:3)
内存分配器使用持久内存分配函数的信号是什么,它会以一种在请求结束时不会消失的方式分配上下文(如果你问,任何套接字),但会持续PHP进程的生命周期。如果有意义的话,它的工作方式与某些连接池库的工作方式相同。回调将在第一次创建套接字时使用。需要在上下文中设置持久性,例如:
<?php
function newSocket(ZMQSocket $soc, $pid) {
echo "Creating New Socket \n", $pid, "\n";
}
echo "=========Creating without persistence ==========\n";
$context = new ZMQContext(1, false);
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket');
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket');
echo "========Creating with persistence ==========\n";
$context = new ZMQContext(1, true);
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket');
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'mysocket', 'newSocket');
会给你
# php -dextension=zmq.so test.php
=========Creating without persistence ==========
Creating New Socket
mysocket
Creating New Socket
mysocket
========Creating with persistence ==========
Creating New Socket
mysocket
在第一个实例中,如果持久化为false,则每次都会重新创建套接字,并且会触发回调。在第二种情况下,如果持久,则仅返回套接字,并且不会触发回调。