PHP的Socket网络编程入门指引
《PHP实例:PHP的Socket网络编程入门指引》要点: PHP实战什么是TCP/IP、UDP? PHP实战???????? TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的. PHP实战 PHP实战TCP/IP协议族包括运输层、网络层、链路层.现在你知道TCP/IP与UDP的关系了吧. PHP实战 PHP实战原来Socket在这里. PHP实战 PHP实战PHP的Socket编程概述 PHP实战同时,php的pcntl模块和posix模块配合可以实现基本的进程管理、信号处理等操作系统级别的功能.这里有两个非常关键的函数,pcntl_fork()和posix_setsid().fork()一个进程,则表示创建了一个运行进程的副本,副本被认为是子进程,而原始进程被认为是父进程.当fork()运行之后,则可以脱离启动它的进程和终端控制等,也意味着父进程可以自由退出.pcntl_fork()返回值,-1表示执行失败,0表示在子进程中,大于0表示在父进程中.setsit(),它首先使新进程成为一个新会话的“领导者”,最后使进程不再控制终端.这也是成为守护进程最关键一步,这意味着,不会随着终端关闭而强制退出进程.对于一个不会被中断的常驻进程来说,这是很关键的一步.进行最后一次fork(),这一步不是必须的,但通常都这么做,它最大的意义是防止获得控制终端 PHP实战什么是守护进程?一个守护进程通常被认为是一个不对终端进行控制的后台任务.它有三个很明显的特征:
PHP实战最常见的实现方法:fork() -> setsid() -> fork(),代码里run_server()方法实现了守护进程. PHP实战server端socket监听代码 PHP实战
<?php
// 接受客户端请求,回复固定的响应内容
function server_listen_socket ($address,$port)
{
$buffer = "Msg from wangzhengyi server,so kubi...";
$len = strlen($buffer);
// create,bind and listen to socket
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if (! $socket) {
echo "failed to create socket:" . socket_strerror($socket) . "n";
exit();
}
$bind_flag = socket_bind($socket,$address,$port);
if (! $bind_flag) {
echo "failed to bind socket:" . socket_strerror($bind_flag) . "n";
exit();
}
$backlog = 20;
$listen_flag = socket_listen($socket,$backlog);
if (! $listen_flag) {
echo "failed to listen to socket:" . socket_strerror($listen_flag) . "n";
exit();
}
echo "waiting for clients to connectn";
while (1) {
if (($accept_socket = socket_accept($socket)) == FALSE) {
continue;
} else {
socket_write($accept_socket,$buffer,$len);
socket_close($accept_socket);
}
}
}
function run_server ()
{
$pid1 = pcntl_fork();
if ($pid1 == 0) {
// first child process
// 守护进程的一般流程:fork()->setsid()->fork()
posix_setsid();
if (($pid2 = pcntl_fork()) == 0) {
$address = "192.168.1.71";
$port = "8767";
server_listen_socket($address,$port);
} else {
// 防止获得控制终端
exit();
}
} else {
// wait for first child process exit
pcntl_wait($status);
}
}
// server守护进程
run_server();
PHP实战运行效果 PHP实战 PHP实战客户端访问,可以通过浏览器或者curl访问,这里直接用curl访问了 PHP实战 《PHP实例:PHP的Socket网络编程入门指引》是否对您有启发,欢迎查看更多与《PHP实例:PHP的Socket网络编程入门指引》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |