我想知道,这是在PHP中将数据从一个进程发送到另一个进程的最快方法吗?数据只是一个短字符串.Curretly我有一个开发了AF_UNIX套接字的解决方案,但基准测试显示将数据从一个进程传递到另一个进程需要0.100毫秒.我想知道,如果共享内存可以更快吗?但是,我不知道,如果有任何新的数据写入,如何让其他进程定期检查共享内存来检测?
当前解决方案
$server = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_bind($server, '/tmp/mysock');
socket_listen($server);
while(true) {
$r = $clients;
if(socket_select($r, $w, $e, 5) > 0) {
$client = socket_accept($server);
$d = trim(socket_read($client, 256, PHP_NORMAL_READ));
echo (microtime(true)-$d)."\n";
socket_close($client);
}
flush();
}
socket_close($server);
Run Code Online (Sandbox Code Playgroud)
和客户:
$d = microtime(true)."\n";
$socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
socket_connect($socket, '/tmp/mysock');
socket_write($socket, $d, strlen($d));
socket_close($socket);
Run Code Online (Sandbox Code Playgroud)
这个解决方案完全正常,很好,但结果是这样的:
0.00019216537475586
9.5129013061523E-5
0.00011920928955078
0.00011801719665527
7.6055526733398E-5
Run Code Online (Sandbox Code Playgroud)
任何想法,如何使这个脚本更快或开发更快(可能是共享内存)的解决方案?
在此先感谢,乔纳斯
我知道拥有这样的MySQL表结构不是适当的技术,但是我必须使用这种结构。问题是,表中的字段的值带有逗号分隔的整数,例如“ 1,3,5,7,10”,我希望查询返回行,其中field对查询传递的数字中有一个,例如:
SELECT * FROM `table` WHERE '5' IN (`field_in_table`)
Run Code Online (Sandbox Code Playgroud)
但是,如果在这种情况下'5'不是该字段中的第一个数字,则它不起作用。任何建议,如何解决?
预先感谢,问候,乔纳斯