iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >如何用PHP实现一个web socket长链接
  • 673
分享到

如何用PHP实现一个web socket长链接

php开发语言服务器websocket 2023-09-02 09:09:05 673人浏览 泡泡鱼
摘要

如何用PHP实现一个WEB Socket长链接 简介 目前php实现web socket 都是使用框架集成来实现,比如hyperf,swoft,或者是安装swoole 扩展来实现websocket

如何用PHP实现一个WEB Socket长链接

简介

目前php实现web socket 都是使用框架集成来实现,比如hyperf,swoft,或者是安装swoole 扩展来实现websocket,那么有没有PHP本身就能够实现的呢,答案当然有,Let’s Go.

函数介绍

服务端

stream_socket_server — Create an Internet or Unix domain server socket

可以帮我创建网络链接具柄,参数如下

stream_socket_server(
string $address,
int &$error_code = null,
string &$error_message = null,
int $flags = STREAM_SERVER_BIND | STREAM_SERVER_LISTEN,
?resource $context = null
): resource|false

客户端

stream_socket_client — Open Internet or Unix domain socket connection

连接句柄

stream_socket_client(
string $address,
int &$error_code = null,
string &$error_message = null,
?float $timeout = null,
int $flags = STREAM_CLIENT_CONNECT,
?resource $context = null
): resource|false

简单运用
 //服务端$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);if (!$socket) {  echo "$errstr ($errno)
\n"
;} else { while ($conn = stream_socket_accept($socket)) { //循环 等待链接 fwrite($conn, 'The local time is ' . date('n/j/Y g:i a') . "\n");//成功链接输出以上内容 大致为:The local time is 3/22/2023 11:13 am fclose($conn); //断开连接 } fclose($socket); //断开socket}?> <?php //客户端$fp = stream_socket_client("tcp://0.0.0.0:8000", $errno, $errstr, 30);if (!$fp) { echo "$errstr ($errno)
\n"
;} else { fwrite($fp, "GET / Http/1.0\r\nHost: www.example.com\r\nAccept: */*\r\n\r\n"); while (!feof($fp)) { echo fgets($fp, 1024); } fclose($fp);}?>
解释

上面的事例,只能在服务器之间调用,而且每次链接都会断开,一旦需要使用服务就需要不断的进行连接,不断的进行三次握手很浪费资源,那么能不能实现一个呢,No Code No BB.

jsDemo
// 创建websocketws = new WebSocket("ws://"+domain+"/"+port);// 当socket连接打开时,输入用户名ws.onopen = function(){}; //自定义 连接建立时处理操作,比如IM系统登陆信息操作// 当有消息时根据消息类型显示不同信息ws.onmessage = function(){};// 操作服务端发来的消息 ws.onclose = function() {  console.log("连接关闭,定时重连");  connect();//重新连接};ws.onerror = function() {  console.log("出现错误");};
PHP实现三次握手
$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);while($conn = @stream_socket_accept($socket,$nbSecondsIdle)){            $message= fread($conn, 1024);            send($conn,$message);  //@todo  //连接成功,有要保持连接,用来接收客户端发送过来的数据包 这里可以把这个连接$conn 保存在内存当中,通过Select or Swoole 事件去loop            fputs ($conn, "OK\n");}function send($socket,$buffer){    $Sec_WebSocket_Key = '';    if (\preg_match("/Sec-WebSocket-Key: *(.*?)\r\n/i", $buffer, $match)) {        $Sec_WebSocket_Key = $match[1];    }    $new_key = \base64_encode(\sha1($Sec_WebSocket_Key . "258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));    $handshake_message = "HTTP/1.1 101 Switching Protocols\r\n"        ."Upgrade: websocket\r\n"        ."Sec-WebSocket-Version: 13\r\n"        ."Connection: Upgrade\r\n"        ."Sec-WebSocket-Accept: " . $new_key . "\r\n";    $handshake_message .= "\r\n";    var_dump($handshake_message);//打印握手信息,然后发送给客户端,建立完整连接    //socket_write($socket,$handshake_message);    $len = @\fwrite($socket, $handshake_message);    return 0;}

来源地址:https://blog.csdn.net/qq_22635549/article/details/129723549

--结束END--

本文标题: 如何用PHP实现一个web socket长链接

本文链接: https://www.lsjlt.com/news/390422.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何用PHP实现一个web socket长链接
    如何用PHP实现一个web socket长链接 简介 目前PHP实现web socket 都是使用框架集成来实现,比如hyperf,swoft,或者是安装swoole 扩展来实现websocket...
    99+
    2023-09-02
    php 开发语言 服务器 websocket
  • PHP如何实现web socket长链接
    本文小编为大家详细介绍“PHP如何实现web socket长链接”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP如何实现web socket长链接”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • 如何把一个长链接转短链接 短链接转化器该如何使用
    最近接了一个需求,涉及到了短链接的相关的知识,于是去查阅了相关的资料,在这里给大家整理分享一下。一、短链接介绍举个例子,现在我的推广的地址是这个:https://blog.csdn.net/CSDNedu/article/details/9...
    99+
    2023-06-04
  • 怎么使用PHP实现长链接
    这篇文章主要介绍了怎么使用PHP实现长链接的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用PHP实现长链接文章都会有所收获,下面我们一起来看看吧。长链接(Long Connection),也称为持久连接(...
    99+
    2023-07-05
  • python如何使用socket实现TCP协议长连接框架
    这篇文章主要介绍了python如何使用socket实现TCP协议长连接框架,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。分析多了协议就会发现,很多的应用,特别是游戏类和IM类...
    99+
    2023-06-29
  • Android如何实现socket通信统一接口
    小编给大家分享一下Android如何实现socket通信统一接口,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Android实现socket通信统一接口,统一接口之后可以在不需要大量修改应用层代码的情况下,使用与当前功能类...
    99+
    2023-06-25
  • Java编程Socket如何实现多个客户端连接同一个服务端
    这篇文章主要介绍Java编程Socket如何实现多个客户端连接同一个服务端,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Java Socket(套接字)通常也称作"套接字",用于描述IP地址和端口...
    99+
    2023-05-30
    java socket
  • 如何用一个printf()调用实现一个web服务器
    这篇文章将为大家详细讲解有关如何用一个printf()调用实现一个web服务器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一...
    99+
    2022-10-19
  • 利用Java如何实现一个双向链表
    利用Java如何实现一个双向链表?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java中双向链表详解及实例写在前面:  双向链表是一种对称结构,它克服了单链表上...
    99+
    2023-05-31
    java 双向链表 ava
  • PHP如何实现短链接生成
    这篇文章主要介绍了PHP如何实现短链接生成,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php版的短链接生成方法<phpfunction shorturl($...
    99+
    2023-06-02
  • 如何实现一个简单的区块链
    这篇文章将为大家详细讲解有关如何实现一个简单的区块链,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。区块链的基础概念很简单:一个分布式数据库,...
    99+
    2022-10-18
  • C语言如何实现一个链表队列
    本篇内容主要讲解“C语言如何实现一个链表队列”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言如何实现一个链表队列”吧!C语言数据结构链表队列的实现1.写在前面  队列是一种和栈相反的,遵循先...
    99+
    2023-06-16
  • 在Java项目中使用Socket 如何实现 一个TCP服务端
    在Java项目中使用Socket 如何实现 一个TCP服务端?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 Java Socket简介  所谓socket 通...
    99+
    2023-05-31
    java socket tcp
  • php如何实现跳转但链接不变
    这篇文章主要介绍php如何实现跳转但链接不变,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php实现跳转但链接不变的方法:首先创建一个PHP示例文件;然后接收参数;最后通过“header('Location:...
    99+
    2023-06-14
  • 怎么用vbscript实现在消息框中显示一个超链接
    这篇文章主要为大家展示了“怎么用vbscript实现在消息框中显示一个超链接”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么用vbscript实现在消息框中显示一个超链接”这篇文章吧。代码如下...
    99+
    2023-06-08
  • 利用Spring Boot如何实现开发一个Web应用
    利用Spring Boot如何实现开发一个Web应用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。静态资源访问在我们开发Web应用的时候,需要引用大量的js、css、图片等静态...
    99+
    2023-05-31
    springboot web开=开放
  • Java如何实现一个单向非循环链表
    这篇文章主要介绍“Java如何实现一个单向非循环链表”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java如何实现一个单向非循环链表”文章能帮助大家解决问题。1、什么是链表?链表是一种物理存储结构上...
    99+
    2023-07-04
  • java利用webService 如何实现一个WSDL接口
    java利用webService 如何实现一个WSDL接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、使用JDK生成WSDL的对象类cmd进入JDK的bin文件中  ...
    99+
    2023-05-31
    java wsdl webservice
  • PHP一个类调用另一个类的方法如何实现
    本篇内容主要讲解“PHP一个类调用另一个类的方法如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP一个类调用另一个类的方法如何实现”吧!在面向对象编程中,类与类之间的依赖关系很常见。当...
    99+
    2023-07-06
  • 如何用php的sort实现一个排序
    本篇内容主要讲解“如何用php的sort实现一个排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用php的sort实现一个排序”吧!在php中,sort可以用于对数值数组进行升序排序,语法...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作