本文介绍基于php原生代码实现socket实现简单的http服务器,通过代码案例教你如何实现socket实现简单的http服务器,让你能快速了解什么是socket实现简单的http服务器,希望能帮助大家。
php socket 实现简单的http服务器。
<?php
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);
}
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 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));
}
run();
然后通过浏览器访问:http://localhost:9502 即可见到服务器返回的结果。