博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用php模拟做服务端侦听端口
阅读量:6713 次
发布时间:2019-06-25

本文共 1672 字,大约阅读时间需要 5 分钟。

 

参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html

 

http://blog.csdn.net/alongken2005/article/details/8056910

 

socket_accept()是服务端接受客户端请求,一旦有一个客户端链接上来的话,则这个函数会返回一个新的socket资源,这个资源是与客户端通信的资源。

 socket_accept()是阻塞的,会一直卡在那里。

 

 

发现情况:一旦客户端断开链接了,会影响到服务端的主进程。如何避免这个影响呢?

 

正常的服务器,应该是新开一个子进程来处理请求。

 

socket_connect()是链接一个socket去。是客户端使用的。

 

c语言的介绍:connect, send, recv都是同步阻塞工作模式。

 那么,可以得出结论,socket_connect()也是阻塞性的。

 

php中使用协程:

http://www.laruence.com/2015/05/28/3038.html

 

socket_recv和socket_read($msgsock, 2048, PHP_NORMAL_READ)

有什么区别呢?

 

stream_select()

接受一个socket流,可以多个,一个数组形式。
等待这些流改变了状态。改变了状态,则会返回大于0的一个值
<?php
/* Prepare the read array */
$read   = array($stream1, $stream2);//创建的两个socket
$write  = NULL;
$except = NULL;
if (false === ($num_changed_streams = stream_select($read, $write, $except, 0))) {
    /* Error handling */
} elseif ($num_changed_streams > 0) {
    /* At least on one of the streams something interesting happened */
}
?>
要使用引用传递,值会被修改。

 

php多路复用参考资料:http://blog.csdn.net/phphot/article/details/2020269

 

总结

如果没有安装socket扩展,则使用如下相关函数:stream_socket_client、fread()、fwrite()、stream_select()、fclose()
如果安装了sokcet扩展,则可以替换掉扩展的函数:
stream_socket_client等价于socket_create()
socket_select()等价于stream_select()
socket_close()等价于fclose()
socket_write()等价于fwrite()
socket_read()等价于fread()

 

stream_socket_client()实际上是在调用linux系统的 connect()函数。

socket_select()、stream_select()都是在调用操作系统提供的select()函数。

 

 思考:stream和socket本质有什么区别呢?

 不知道,想着去去思考socket_accept和socket_listen()区别,也许就能找到答案了。

 

我总把socket_accept和socket_listen()进行混淆了。

 

socket_accept是开始接受客户端的链接,如果有客户端链接上来,这个函数会返回一个socket通道的句柄,这个句柄是专门与客户端单独的句柄。socket_listen是开始侦听这个socket通道,只是侦听,并不是接受客户端的连接请求。

 

转载于:https://www.cnblogs.com/wangtao_20/p/4888455.html

你可能感兴趣的文章
交互原型画得丑?29个优秀UI/UX线框草图
查看>>
用U盘安装debian系统
查看>>
Mac 下得Jmeter 测试
查看>>
java基础之本地线程
查看>>
sqlserver2005 递归查询
查看>>
30天提升技术人的写作力-第十一天
查看>>
OSPF环境下帧中继的配置
查看>>
Python 17.4 使用Web框架
查看>>
马哥1-3
查看>>
spring容器
查看>>
Linux系统架构(LB-HA集群)-nginx负载均衡集群配置
查看>>
ios版塔防类游戏源码
查看>>
Backup Exec 2010 V-79-57344-65072
查看>>
docker的学习
查看>>
我的友情链接
查看>>
记一次线上Java程序导致服务器CPU占用率过高的问题排除过程
查看>>
CentOS6、7 LVM逻辑卷分区自动扩容Shell脚本编程思路与实例
查看>>
Linux下sqlite3常用命令!!!
查看>>
mysqldump导出的数据导入时特别慢的问题解决
查看>>
我的友情链接
查看>>