php socket实现简单的http服务器
<?php
function onMessage($connection)
{
//拼装返回的html内容
$content = '<html><title>hello,world</title><body>hello,world,http</body></html>';
//拼装头信息
$header = '';
$header .= "HTTP/1.1 200 OK\r\n";
$header .= "Date: ".gmdate('D, d M Y H:i:s T')."\r\n";
$header .= "Content-Type: text/html;charset=utf-8\r\n";
$header .= "Content-Length: ".strlen($content)."\r\n\r\n";//必须2个\r\n表示头部信息结束
$header .= $content;
socket_write($connection,$header,strlen($header));
}
function onAccept($socket)
{
//接收客户端传递过来的信息
while(true)
{
$accept_resource = socket_accept($socket);
if($accept_resource !== false)
{
$string = socket_read($accept_resource,1024);
echo 'server receive is :'.$string.PHP_EOL;
if($string != false)
{
call_user_func('onMessage',$accept_resource);
}
}
}
}
function run()
{
//创建服务端的socket套接流,net协议为IPv4,protocol协议为TCP
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
/*绑定接收的套接流主机和端口,与客户端相对应*/
if(socket_bind($socket,"0.0.0.0", 9502) == false){
echo 'server bind fail:'.socket_strerror(socket_last_error());exit();
}
//监听套接流
if(socket_listen($socket,4)==false){
echo 'server listen fail:'.socket_strerror(socket_last_error());exit();
}
//非阻塞
socket_set_nonblock($socket);
call_user_func('onAccept',$socket);
}
run();
浏览器访问: