用php模拟做服务端侦听端口
参考: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通道,只是侦听,并不是接受客户端的连接请求。
用php模拟做服务端侦听端口的更多相关文章
- Socket(TCP)客户端请求和服务端监听和链接基础(附例子)
一:基础知识回顾 一: Socket 类 实现 Berkeley 套接字接口. Socket(AddressFamily, SocketType,ProtocolType) 使用指定的地址族.套接字类 ...
- [Mark]Tomcat/IIS 更改 HTTP 侦听端口
目的: IIS HTTP 侦听端口改为 8088 Tomcat HTTP 侦听端口改为 80 环境: Windows Server 2012 R2 IIS8.5 (默认端口是 80) Tomcat8. ...
- windows下百度离线人脸识别本地部署与使用(nodejs做客户端,c++做服务端,socket做通信)
1.离线人脸识别本地部署 详情请阅读百度人脸识别官网 2.nodejs做socket通信的客户端 为什么不直接通过调用c++编译的exe获得人脸识别结果? 原因:exe运行时会加载很多模型而消耗很多时 ...
- 数往知来 ASP.NET 模拟服务器:服务端_静态页面_动态页面的响应<十七>
一.客户端是怎么看到我们的网页的呢/ 在浏览器端,如果用汉语请求的是一普通的HTML网页,呢么我们的IIS服务器, 接收到请求以后,那么从IIS服务器所在的电脑区查找该HTML网页, 找到以后将该 ...
- 如何使用Vue2做服务端渲染
花费了一个月时间,终于在新养车之家项目中成功部署了vue2服务端渲染(SSR),并且使用上了Vuex 负责状态管理,首屏加载时间从之前4G网络下的1000ms,提升到了现在500-700ms之间,SS ...
- SSE技术详解:使用 HTTP 做服务端数据推送应用的技术
SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议. 严格地说,HTTP 协议是没有办法做服务器推送的,但是当服务器向客户端声明接下来 ...
- 从架构师视角看是否该用Kotlin做服务端开发?
前言 自从Oracle收购Sun之后,对Java收费或加强控制的尝试从未间断,谷歌与Oracle围绕Java API的官司也跌宕起伏.虽然Oracle只是针对Oracle JDK8的升级收费,并释放了 ...
- PostgreSQL服务端监听设置及client连接方法
背景介绍: PostgreSQL服务端执行在RedHat Linux上,IP为:192.168.230.128 client安装在Windows XP上, IP为:192.168.230.1 配置方法 ...
- linux c做服务端使用多线程接收图片并且将图片写入数据库
#include<sys/socket.h> #include<sys/types.h> #include<sys/stat.h>//包含文件的全部结构,属性 #i ...
随机推荐
- MyBatis 环境搭建 (一)
一.MyBatis简介 MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis 使用简 ...
- maven install 读取jar包时出错;error in opening zip file
错误信息: [INFO] ------------------------------------------------------------------------ [ERROR] Failed ...
- SoapUI测试WS接口实战
引文: 本文讨论以下问题: 视频播放功能如何进行压力测试? 进行webservices接口测试时,用LR和soapui哪个工具更好? 1 测试需求 前几天接到一项压力测试的任务:视频播放功能的并发压力 ...
- HTTP学习四:SPDY和HTTP/2.0
1 HTTP1.0/1.1与HTTPS的不足 1.1 HTTP1.0/1.1不足 单路连接 HTTP 协议的最大弊端就是每个 TCP 连接只能对应一个 HTTP 请求,即每个 HTTP 连接只请求一个 ...
- Ionic 入门
什么是lonic 简单来说lonic就是一款HTML5移动端应用开发框架,通过配合AngularJS和Cordova/PhoneGap可以开发一款移动端app,值得注意的是它创建的app是混合移动应用 ...
- ASP.NET 路由解析
这段时间在读园子里Artech大神的<ASP.NET MVC5框架揭秘>,慢慢地从底层了解了MVC模式的设计思路.下面是一些阅读的总结. 传统的Web Forms应用,URL指向的是具体的 ...
- WebStorm 9 自动编译 LESS 产出 CSS 和 source maps
1.双击桌面Chrome图标,打开Chrome,按键盘“F12”键,打开开发工具界面,点击其右上角的“设置”按钮,勾选“Enable JavaScript source maps” 及“Enable ...
- 一步一步学Python(1) 基本逻辑控制举例和编码风格规范
(1) 基本逻辑控制举例和编码风格规范 1.while死循环 2.for循环 3.if,elif,else分支判断 4.编码风格(官方建议) 版本:Python3.4 1.while死循环 #func ...
- [linux] is not in the sudoers file
$su - $visudo append usrname ALL=(ALL) ALL save done ctrl+d
- adb shell 查看系统属性(用来判断特殊的操作系统)
一般来讲,在android程序开发中进行需要判断设备类型和系统版本 1.设备类型判断(android.os.Build.MODEL) 比如判断属于Google Nexus 5,Nexus 7,MIUI ...