精华内容
下载资源
问答
  • php支持websocket实例

    2017-05-04 13:10:58
    php服务,支持html5 websocket。在命令行下 键入 php pws.php,开启服务。打开pws.html网页即可。
  • 主要介绍了PHP实现websocket通信的方法,结合实例形式分析了php基于websocket类的socket通信相关客户端与服务器端操作技巧,需要的朋友可以参考下
  • php+websocket+html 在线实时聊天断开连接后6秒钟自动连接实时刷新纪录
  • Html5 Websocket 实时聊天实例php版)
  • 本文通过实例代码给大家介绍了php redis 处理websocket聊天记录的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 本文实例讲述了php基于websocket搭建简易聊天室实践。分享给大家供大家参考。具体如下: 1、前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室。于是搜集各种...
  • php websocket聊天实例,即时发送消息,即时接收消息;已通过调试运行能用
  • Swoole WebSocket实例

    2021-04-18 09:36:35
    Swoole WebSocket实例SwooleWebSocket介绍swoole-1.7.9 增加了内置的websocket服务器支持,通过几行PHP代码就可以写出一个异步非阻塞多进程的WebSocket服务器。常见使用场景:我们在使用php开发的时候,原生最不好用...

    Swoole WebSocket实例

    Swoole WebSocket介绍

    swoole-1.7.9 增加了内置的websocket服务器支持,通过几行PHP代码就可以写出一个异步非阻塞多进程的WebSocket服务器。

    常见使用场景:我们在使用php开发的时候,原生最不好用的是socket类库了,而在开发IM和及时通信项目是,我们现在有了新的选择后端使用php Swoole WebSocket + 前端 html5 WebSocket;

    简单实例:

    $server = new swoole_websocket_server("0.0.0.0", 9501);

    $server->on('open', function (swoole_websocket_server $server, $request) {

    echo "server: handshake success with fd{$request->fd}\n";

    });

    $server->on('message', function (swoole_websocket_server $server, $frame) {

    echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";

    $server->push($frame->fd, "this is server");

    });

    $server->on('close', function ($ser, $fd) {

    echo "client {$fd} closed\n";

    });

    $server->start();

    onRequest回调

    swoole_websocket_server 继承自 swoole_http_server

    设置了onRequest回调,websocket服务器也可以同时作为http服务器

    未设置onRequest回调,websocket服务器收到http请求后会返回http 400错误页面

    客户端

    Chrome/Firefox/高版本IE/Safari等浏览器内置了JS语言的WebSocket客户端

    异步的PHP程序中可以使用Swoole\Http\Client作为WebSocket客户端

    apache/php-fpm或其他同步阻塞的PHP程序中可以使用swoole/framework提供的同步WebSocket客户端

    非WebSocket客户端不能与WebSocket服务器通信

    甚至你还可以结合使用socket.io来配合开发

    展开全文
  • php中使用websocket详解

    2020-12-18 16:04:24
    4、用一个聊天室作为实例详细讲解在PHP中如何使用socket 一、socket协议的简介  WebSocket是什么,有什么优点  WebSocket是一个持久化的协议,这是相对于http非持久化来说的。  举个简单的例子,http1.0的生命...
  • Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...
  • 实现基于Websocket 协议的 PHP类库 和 javascript类库 , 实现事件 回调函数的架构开发,以一个简单聊天室实例介绍其使用方法: 不同浏览器,不同电脑,不同地域, 实时通讯。实现的详细 请研究源码。 /***服务端*...
  • 运行服务器实例php websocket_server.php 。 在浏览器中通过HTTP协议打开websocket_client.html。 用例范例 即时通讯 推送应用通知 共享应用程序,例如演示文稿(幻灯片),协作文本编辑器 数据监控等 底线 作曲...
  • php websocket 简单DEMO

    2021-04-20 06:39:39
    // Usage: $master=new WebSocket("localhost",12345);class WebSocket{var $master;var $sockets = array();var $users = array();var $debug = false;function __construct($address,$port){error_reporting(E...

    // Usage: $master=new WebSocket("localhost",12345);

    class WebSocket{

    var $master;

    var $sockets = array();

    var $users = array();

    var $debug = false;

    function __construct($address,$port){

    error_reporting(E_ALL);

    set_time_limit(0);

    ob_implicit_flush();

    $this->master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() failed");

    socket_set_option($this->master, SOL_SOCKET, SO_REUSEADDR, 1) or die("socket_option() failed");

    socket_bind($this->master, $address, $port) or die("socket_bind() failed");

    socket_listen($this->master,20) or die("socket_listen() failed");

    $this->sockets[] = $this->master;

    $this->say("Server Started : ".date('Y-m-d H:i:s'));

    $this->say("Listening on : ".$address." port ".$port);

    $this->say("Master socket : ".$this->master."\n");

    while(true){

    $changed = $this->sockets;

    socket_select($changed,$write=NULL,$except=NULL,NULL);

    foreach($changed as $socket){

    if($socket==$this->master){

    $client=socket_accept($this->master);

    if($client<0){ $this->log("socket_accept() failed"); continue; }

    else{ $this->connect($client); }

    }

    else{

    $bytes = @socket_recv($socket,$buffer,2048,0);

    if($bytes==0){ $this->disconnect($socket); }

    else{

    $user = $this->getuserbysocket($socket);

    if(!$user->handshake){ $this->dohandshake($user,$buffer); }

    else{ $this->process($user,$this->unwrap($buffer)); }

    }

    }

    }

    }

    }

    function process($user,$msg){

    /* Extend and modify this method to suit your needs */

    /* Basic usage is to echo incoming messages back to client */

    $this->send($user->socket,$msg);

    }

    function send($client,$msg){

    $this->say("> ".$msg);

    $msg = $this->wrap($msg);

    socket_write($client,$msg,strlen($msg));

    $this->say("! ".strlen($msg));

    }

    function connect($socket){

    $user = new User();

    $user->id = uniqid();

    $user->socket = $socket;

    array_push($this->users,$user);

    array_push($this->sockets,$socket);

    $this->log($socket." CONNECTED!");

    $this->log(date("d/n/Y ")."at ".date("H:i:s T"));

    }

    function disconnect($socket){

    $found=null;

    $n=count($this->users);

    for($i=0;$i

    if($this->users[$i]->socket==$socket){ $found=$i; break; }

    }

    if(!is_null($found)){ array_splice($this->users,$found,1); }

    $index=array_search($socket,$this->sockets);

    socket_close($socket);

    $this->log($socket." DISCONNECTED!");

    if($index>=0){ array_splice($this->sockets,$index,1); }

    }

    function dohandshake($user,$buffer){

    $this->log("\nRequesting handshake...");

    $this->log($buffer);

    list($resource,$host,$origin,$key1,$key2,$l8b) = $this->getheaders($buffer);

    $this->log("Handshaking...");

    //$port = explode(":",$host);

    //$port = $port[1];

    //$this->log($origin."\r\n".$host);

    $upgrade = "HTTP/1.1 101 WebSocket Protocol Handshake\r\n" .

    "Upgrade: WebSocket\r\n" .

    "Connection: Upgrade\r\n" .

    //"WebSocket-Origin: " . $origin . "\r\n" .

    //"WebSocket-Location: ws://" . $host . $resource . "\r\n" .

    "Sec-WebSocket-Origin: " . $origin . "\r\n" .

    "Sec-WebSocket-Location: ws://" . $host . $resource . "\r\n" .

    //"Sec-WebSocket-Protocol: icbmgame\r\n" . //Client doesn't send this

    "\r\n" .

    $this->calcKey($key1,$key2,$l8b) . "\r\n";// .

    //"\r\n";

    socket_write($user->socket,$upgrade.chr(0),strlen($upgrade.chr(0)));

    $user->handshake=true;

    $this->log($upgrade);

    $this->log("Done handshaking...");

    return true;

    }

    function calcKey($key1,$key2,$l8b){

    //Get the numbers

    preg_match_all('/([\d]+)/', $key1, $key1_num);

    preg_match_all('/([\d]+)/', $key2, $key2_num);

    //Number crunching [/bad pun]

    $this->log("Key1: " . $key1_num = implode($key1_num[0]) );

    $this->log("Key2: " . $key2_num = implode($key2_num[0]) );

    //Count spaces

    preg_match_all('/([ ]+)/', $key1, $key1_spc);

    preg_match_all('/([ ]+)/', $key2, $key2_spc);

    //How many spaces did it find?

    $this->log("Key1 Spaces: " . $key1_spc = strlen(implode($key1_spc[0])) );

    $this->log("Key2 Spaces: " . $key2_spc = strlen(implode($key2_spc[0])) );

    if($key1_spc==0|$key2_spc==0){ $this->log("Invalid key");return; }

    //Some math

    $key1_sec = pack("N",$key1_num / $key1_spc); //Get the 32bit secret key, minus the other thing

    $key2_sec = pack("N",$key2_num / $key2_spc);

    //This needs checking, I'm not completely sure it should be a binary string

    return md5($key1_sec.$key2_sec.$l8b,1); //The result, I think

    }

    function getheaders($req){

    $r=$h=$o=null;

    if(preg_match("/GET (.*) HTTP/" ,$req,$match)){ $r=$match[1]; }

    if(preg_match("/Host: (.*)\r\n/" ,$req,$match)){ $h=$match[1]; }

    if(preg_match("/Origin: (.*)\r\n/" ,$req,$match)){ $o=$match[1]; }

    if(preg_match("/Sec-WebSocket-Key1: (.*)\r\n/",$req,$match)){ $this->log("Sec Key1: ".$sk1=$match[1]); }

    if(preg_match("/Sec-WebSocket-Key2: (.*)\r\n/",$req,$match)){ $this->log("Sec Key2: ".$sk2=$match[1]); }

    if($match=substr($req,-8)) { $this->log("Last 8 bytes: ".$l8b=$match); }

    return array($r,$h,$o,$sk1,$sk2,$l8b);

    }

    function getuserbysocket($socket){

    $found=null;

    foreach($this->users as $user){

    if($user->socket==$socket){ $found=$user; break; }

    }

    return $found;

    }

    function say($msg=""){ echo $msg."\n"; }

    function log($msg=""){ if($this->debug){ echo $msg."\n"; } }

    function wrap($msg=""){ return chr(0).$msg.chr(255); }

    function unwrap($msg=""){ return substr($msg,1,strlen($msg)-2); }

    }

    class User{

    var $id;

    var $socket;

    var $handshake;

    }

    ?>

    展开全文
  • 文章来自:博客http://blog.csdn.net/helencoder/article/details/48541633(实例篇)PHP基础知识文章列表整理,分享给需要翻阅的你PHPwebsocket实时消息推送实现步骤如下:1. 获取GoEasy appkey.在goeasy官网上注册一...

    247685fd153cee2.gif文章来自:博客http://blog.csdn.net/helencoder/article/details/48541633

    (实例篇)PHP基础知识文章列表整理,分享给需要翻阅的你

    PHP websocket实时消息推送

    实现步骤如下:

    1. 获取GoEasy appkey.

    在goeasy官网上注册一个账号,并新建一个app. APP创建好后系统会为该app自动生成两个key, 一个既可以用来接收又可以用来推送 (supper key),另一个只可以用来接收(subscriber key).

    2. 客户端订阅一个channel.

    a. 在客户端引入goeasy.js, js地址:cdn.goeasy.io/goeasy.js

    需要注意的是,不能将goeasy.js下载到本地,因为goeasy会根据不同浏览器来提供不同的js. 官网上也有相应说明。

    b. 订阅代码

    ed5b2328a5a0ec4.jpg

    3. 前台推送及后台推送3.1. 前台往相同channel上推送在引入了goeasy.js的页面,直接调用goEasy. publish(‘csdnNotification’, ‘您的好友222已上线’); 用法与订阅类似。3.2. 后台往相同channel上推送. 用GoEasy提供的restfulAPI实现API url: goeasy.io/goeasy/publish方式: Post参数列表:

    希望对大家有帮助。

    以上就是PHP基于websocket实现前台及后台实时推送的详细内容

    感谢关注“极资讯”,一起学习的可加小编微信为好友!记得备注哦

    acbb8561c03da5f.jpeg

    始发于微信公众号: 极资讯

    展开全文
  • html5+php websocket实时聊天实例

    热门讨论 2013-06-04 15:50:38
    php不擅长做实时聊天,长轮询是一种低效的方法,其它又难以实现,但如果用websocket就好了,高效并且容易使用. 之前找到的一直不能用,这个基本测试通过~
  • 主要介绍了PHP框架结合实现WebSocket在线聊天通讯系统,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • WebSocket是什么?WebSocket是一个持久化的协议,这是相对于http非持久化来说的。举个简单的例子,http1.0的生命周期是以request作为界定的,也就是一个request,一个response,对于http来说,本次client与server的...

    WebSocket是什么?

    WebSocket是一个持久化的协议,这是相对于http非持久化来说的。举个简单的例子,http1.0的生命周期是以request作为界定的,也就是一个request,一个response,对于http来说,本次client与server的会话到此结束;而在http1.1中,稍微有所改进,即添加了keep-alive,也就是在一个http连接中可以进行多个request请求和多个response接受操作。然而在实时通信中,并没有多大的作用,http只能由client发起请求,server才能返回信息,即server不能主动向client推送信息,无法满足实时通信的要求。而WebSocket可以进行持久化连接,即client只需进行一次握手,成功后即可持续进行数据通信,值得关注的是WebSocket实现client与server之间全双工通信,即server端有数据更新时可以主动推送给client端。

    下面的图演示了 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket 套接字做了封装处理,开发者使用的时候只需要考虑数据的交互而不用处理连接的建立。

    c8af74240974b67e01e6d9b41db6fa14.png

    client与server建立socket时握手的会话内容,即request与response

    a、client建立WebSocket时向服务器端请求的信息GET /chat HTTP/1.1

    Host: server.example.com

    Upgrade: websocket //告诉服务器现在发送的是WebSocket协议

    Connection: Upgrade

    Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== //是一个Base64 encode的值,这个是浏览器随机生成的,用于验证服务器端返回数据是否是WebSocket助理

    Sec-WebSocket-Protocol: chat, superchat

    Sec-WebSocket-Version: 13

    Origin: php.cn

    b、服务器获取到client请求的信息后,根据WebSocket协议对数据进行处理并返回,其中要对Sec-WebSocket-Key进行加密等操作HTTP/1.1 101 Switching Protocols

    Upgrade: websocket //依然是固定的,告诉客户端即将升级的是Websocket协议,而不是mozillasocket,lurnarsocket或者shitsocket

    Connection: Upgrade

    Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= //这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key,也就是client要求建立WebSocket验证的凭证

    Sec-WebSocket-Protocol: chat

    PHP中建立socket的过程讲解

    1、在PHP中,client与server之间建立socket通信,首先在PHP中创建socket并监听端口信息,代码如下:<?php

    //传相应的IP与端口进行创建socket操作

    function WebSocket($address,$port){

    $server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

    socket_set_option($server, SOL_SOCKET, SO_REUSEADDR, 1);//1表示接受所有的数据包

    socket_bind($server, $address, $port);

    socket_listen($server);return $server;

    }

    ?>

    2、设计一个循环挂起WebSocket通道,进行数据的接收、处理和发送<?php

    //对创建的socket循环进行监听,处理数据

    function run(){

    //死循环,直到socket断开

    while(true){

    $changes=$this->sockets;

    $write=NULL;

    $except=NULL;

    /*

    //这个函数是同时接受多个连接的关键,我的理解它是为了阻塞程序继续往下执行。

    socket_select ($sockets, $write = NULL, $except = NULL, NULL);

    $sockets可以理解为一个数组,这个数组中存放的是文件描述符。当它有变化(就是有新消息到或者有客户端连接/断开)时,socket_select函数才会返回,继续往下执行。

    $write是监听是否有客户端写数据,传入NULL是不关心是否有写变化。

    $except是$sockets里面要被排除的元素,传入NULL是”监听”全部。

    最后一个参数是超时时间

    如果为0:则立即结束

    如果为n>1: 则最多在n秒后结束,如遇某一个连接有新动态,则提前返回

    如果为null:如遇某一个连接有新动态,则返回

    */

    socket_select($changes,$write,$except,NULL);

    foreach($changes as $sock){

    //如果有新的client连接进来,则

    if($sock==$this->master){

    //接受一个socket连接

    $client=socket_accept($this->master);

    //给新连接进来的socket一个唯一的ID

    $key=uniqid();

    $this->sockets[]=$client; //将新连接进来的socket存进连接池

    $this->users[$key]=array(

    'socket'=>$client, //记录新连接进来client的socket信息

    'shou'=>false //标志该socket资源没有完成握手

    );

    //否则1.为client断开socket连接,2.client发送信息

    }else{

    $len=0;

    $buffer='';

    //读取该socket的信息,注意:第二个参数是引用传参即接收数据,第三个参数是接收数据的长度

    do{

    $l=socket_recv($sock,$buf,1000,0);

    $len+=$l;

    $buffer.=$buf;

    }while($l==1000);

    //根据socket在user池里面查找相应的$k,即健ID

    $k=$this->search($sock);

    //如果接收的信息长度小于7,则该client的socket为断开连接

    if($len<7){

    //给该client的socket进行断开操作,并在$this->sockets和$this->users里面进行删除

    $this->send2($k);

    continue;

    }

    //判断该socket是否已经握手

    if(!$this->users[$k]['shou']){

    //如果没有握手,则进行握手处理

    $this->woshou($k,$buffer);

    }else{

    //走到这里就是该client发送信息了,对接受到的信息进行uncode处理

    $buffer = $this->uncode($buffer,$k);

    if($buffer==false){

    continue;

    }

    //如果不为空,则进行消息推送操作

    $this->send($k,$buffer);

    }

    }

    }

    }

    }

    ?>

    3、以上服务器端完成的WebSocket的前期工作后,就等着client连接进行,client创建WebSocket很简单,代码如下:var ws = new WebSocket("ws://IP:端口");

    //握手监听函数

    ws.onopen=function(){

    //状态为1证明握手成功,然后把client自定义的名字发送过去

    if(so.readyState==1){

    //握手成功后对服务器发送信息

    so.send('type=add&ming='+n);

    }

    }

    //错误返回信息函数

    ws.onerror = function(){

    console.log("error");

    };

    //监听服务器端推送的消息

    ws.onmessage = function (msg){

    console.log(msg);

    }

    //断开WebSocket连接

    ws.onclose = function(){

    ws = false;

    }

    【相关教程推荐】

    展开全文
  • 我用ESD框架他有个mysql插件,插件内获取mysql实例是用连接池的:public function mysql($name = "default"){$db = getContextValue("MysqliDb:$name");if ($db == null) {/** @var MysqlManyPool $mysqlPool */$...
  • 最近在网上查找websocket资料发现并没有很深入的讲解只是做了一些概念大纲性讲解和php的demo,在查找相关详细资料后这里深入讲解一下。 一、了解tcp、socket、websocket 讲解websocket之前我们首先来了解下tcp、...
  • 本文实例讲述了php+html5基于websocket实现聊天室的方法。分享给大家供大家参考。具体如下: html5的websocket 实现了双向通信,折腾了几天弄了个聊天室,分享给大家 <?php error_reporting(E_ALL); ob_implicit...
  • 本文实例讲述了php+websocket 实现的聊天室功能。分享给大家供大家参考,具体如下: 一、配置  开启socket组建,否则会报 Fatal error: Call to undefined function socket_create() 错误 1、打开php.ini配置文件...
  • php+前端实现websocket时时聊天,实现聊天室私聊。大神绕过 实例http://mess.qaq6.cn/
  • php使用websocket示例详解数据解密

    千次阅读 2020-05-27 09:37:42
    一、php 中处理 websocket WebSocket 连接是由客户端主动发起的,所以一切要从客户端出发。第一步是要解析拿到客户端发过来的 Sec-WebSocket-Key 字符串。 复制代码代码如下: GET /chat HTTP/1.1 Host: server...
  • 接口WebSocket

    2021-04-23 13:20:36
    WebSocket接口新增自V0.0.4...使用Websocket接口, 只需要实例化Api\Websocket.php即可。使用Websocket接口, 就是使用了H5推出的WebSocket协议。可以在服务器和客户端浏览器之间维持一个长链接。颠覆传统的HTTP交互方...
  • websocket/**0:未连接1:连接成功,可通讯2:正在关闭3:连接已关闭或无法打开*///创建一个webSocket 实例var webSocket = new WebSocket("ws://192.168.31.152:8083");webSocket.onerror = function (event){on...
  • php使用websocket示例 client 和 server

    万次阅读 2017-05-10 16:33:14
    这篇文章主要介绍了php使用websocket示例,需要的朋友可以参考下 下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块...
  • PHP使用Websocket进行实时数据推送 建立Websocket服务端 <?php /** * Created by qipa250 * Date: 2019/08/05 * Time: 14:33 */ class SocketService { private $address = '127.0.0.1'; private $port =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,577
精华内容 1,830
关键字:

php实例websocket