1、HTML5新特性之WebSocket:
 ①HTTP协议的不足:基于“请求——响应”模型,只有在客户端发送请求后,服务器才会给予响应;对于实时的股票走势图,以及聊天通讯等无法满足需求;
 ②解决方案:setInterval+AJAX:心跳请求;
  问题:过于频繁对服务器压力过大,频率过低则信息获取延迟;
 ③最佳解决方案——WebSocket协议:
  基于“广播——收听”模型,客户端连接到服务器后不再断开,服务器有了消息随时发送给客户端,客户端也可以不停地给服务器发送消息;
  不足:客户端和服务器是永久连接,服务器端可容纳的连接数是有限的;
 ④WebSocket应用需要服务器端和客户端都使用WebSocket协议;
 ⑤socket_server.php:

<?php

$address = "127.0.0.1";

$port = 9999; //调试的时候,可以多换端口来测试程序!

set_time_limit(0);

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

socket_set_block($sock);

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

socket_listen($sock, 4);

do

{

echo "Waiting for Connection...\n";

$msgsock = socket_accept($sock);

echo "Waiting for Request...\n";

$buf = socket_read($msgsock, 8192);     //读取请求

echo "Request Received: $buf\n";

$response = hand_shake($buf);

socket_write($msgsock,$response,strlen($response)); //发送响应

//正式开始通信...

$buf = socket_read($msgsock, 8192);

for($i=0; $i<5; $i++){

$msg = "WELCOME $i\n";

$msg = code($msg);

sleep(1);

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

}

socket_close($msgsock);

} while (true);

socket_close($sock);

function hand_shake($buf){

$buf  = substr($buf,strpos($buf,'Sec-WebSocket-Key:')+18);

$key  = trim(substr($buf,0,strpos($buf,"\r\n")));

$new_key = base64_encode(sha1($key."258EAFA5-E914-47DA-95CA-C5AB0DC85B11",true));

$new_message = "HTTP/1.1 101 Switching Protocols\r\n";

$new_message .= "Upgrade: websocket\r\n";

$new_message .= "Sec-WebSocket-Version: 13\r\n";

$new_message .= "Connection: Upgrade\r\n";

$new_message .= "Sec-WebSocket-Accept: " . $new_key . "\r\n\r\n";

return $new_message;

}

function code($msg){

$msg = preg_replace(array('/\r$/','/\n$/','/\r\n$/',), '', $msg);

$frame = array();

$frame[0] = '81';

$len = strlen($msg);

$frame[1] = $len<16?'0'.dechex($len):dechex($len);

$frame[2] = ord_hex($msg);

$data = implode('',$frame);

return pack("H*", $data);

}

function ord_hex($data)  {

$msg = '';

$l = strlen($data);

for ($i= 0; $i<$l; $i++) {

$msg .= dechex(ord($data{$i}));

}

return $msg;

}

HTML5_07之WebSocket的更多相关文章

  1. 漫扯:从polling到Websocket

    Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...

  2. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  3. java使用websocket,并且获取HttpSession,源码分析

    转载请在页首注明作者与出处 http://www.cnblogs.com/zhuxiaojie/p/6238826.html 一:本文使用范围 此文不仅仅局限于spring boot,普通的sprin ...

  4. WebSocket - ( 一.概述 )

    说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...

  5. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  6. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  7. Cowboy 开源 WebSocket 网络库

    Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...

  8. 借助Nodejs探究WebSocket

    文章导读: 一.概述-what's WebSocket? 二.运行在浏览器中的WebSocket客户端+使用ws模块搭建的简单服务器 三.Node中的WebSocket 四.socket.io 五.扩 ...

  9. 细说websocket - php篇

    下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket ...

随机推荐

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. Emoji选项列表

    一.需要的前提文件 从网上下载Emoji的表情包,当然是png的图片,因为WPF不支持彩色的Emoji,所以,做列表的时候,需要用图片. 随着压缩包一起的还有一个Emoji.xml文件,文件的层级结构 ...

  3. 80 端口被占用 pid=4

    80端口被pid=4的系统进程给占用的解决方法: 一般开发的时候我们都会安装sqlserver ,也会把Sql server Reporting Services 安装上去.原因就是这个服务占用了80 ...

  4. OpenCV人脸识别Eigen算法源码分析

    1 理论基础 学习Eigen人脸识别算法需要了解一下它用到的几个理论基础,现总结如下: 1.1 协方差矩阵 首先需要了解一下公式: 共公式可以看出:均值描述的是样本集合的平均值,而标准差描述的则是样本 ...

  5. 玩转spring boot——结合JPA事务

    接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  6. vue.js初探

    前言 入手2016最火前端框架之一vue.js.大概从网上找了些资料看了下vue.js,从网上的资料来看只能惊叹其发展速度太快,让我意外的是其作者是华人的前提下作品这么受欢迎. 网上的博客和教程各种组 ...

  7. jQuery2.x源码解析(缓存篇)

    jQuery2.x源码解析(构建篇) jQuery2.x源码解析(设计篇) jQuery2.x源码解析(回调篇) jQuery2.x源码解析(缓存篇) 缓存是jQuery中的又一核心设计,jQuery ...

  8. 我大中华微软MVP中国区人才库

    刘海峰:国内知名微软开源技术网站51Aspx 创始人,十年以上的Asp.net从业经验,微软MSDN特约讲师.Teched讲师.ImagineCup大赛评委.人大出版社研修班特约讲师,曾多次受邀访问美 ...

  9. H3 BPM初次安装常见错误详解1-4

    错误1: 首次安装完成无法访问,效果如下. 错误原因:没有配置IIS. 解决方法: 控制面板-程序-打开或关闭Windows功能,选择internet信息服务. 因为安装的时候没有没有iis,所以程序 ...

  10. 如何dos命令打开服务窗口?

    1.输入services.msc点击<确定>进入服务窗口.如图: