websocket-php
<head>
<meta charset="utf-8" />
<title>test</title>
</head>
<body>
<script>
var ws = new WebSocket("ws://localhost:4000");
ws.onopen = function(){
console.log("握手成功");
};
ws.onerror = function(){
console.log("error");
};
</script>
</body>
</html>
//基于websocket version 13
$accept = base64_encode(sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
return $accept;
}
// 解析数据帧
function decode($buffer) {$len = $masks = $data = $decoded = null;$len = ord($buffer[1]) & 127;if ($len === 126) {$masks = substr($buffer, 4, 4);$data = substr($buffer, 8);} else if ($len === 127) {$masks = substr($buffer, 10, 4);$data = substr($buffer, 14);} else {$masks = substr($buffer, 2, 4);$data = substr($buffer, 6);}for ($index = 0; $index < strlen($data); $index++) {$decoded .= $data[$index] ^ $masks[$index % 4];}return $decoded;
}
// 返回帧信息处理
function frame($s) {$a = str_split($s, 125);if (count($a) == 1) {return "\x81" . chr(strlen($a[0])) . $a[0];}$ns = "";foreach ($a as $o) {$ns .= "\x81" . chr(strlen($o)) . $o;}return $ns;
}// 返回数据
function send($client, $msg){$msg = $this->frame($msg);socket_write($client, $msg, strlen($msg));
}
var ws = new WebSocket("ws://localhost:4000");
ws.onopen = function(){console.log("握手成功");
};
ws.onmessage = function(e){console.log("message:" + e.data);
};
ws.onerror = function(){console.log("error");
};
ws.send("李靖");
1. websocket 版本问题
客户端在握手时的请求中有Sec-WebSocket-Version: 13
,这样的版本标识,这个是一个升级版本,现在的浏览器都是使用的这个版本。而以前的版本在数据加密的部分更加麻烦,它会发送两个key:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Origin: http://example.comSec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Key1: xxxx
Sec-WebSocket-Key2: xxxx
function encry($key1,$key2,$l8b){//Get the numberspreg_match_all('/([\d]+)/', $key1, $key1_num);preg_match_all('/([\d]+)/', $key2, $key2_num);$key1_num = implode($key1_num[0]);$key2_num = implode($key2_num[0]);//Count spacespreg_match_all('/([ ]+)/', $key1, $key1_spc);preg_match_all('/([ ]+)/', $key2, $key2_spc);if($key1_spc==0|$key2_spc==0){ $this->log("Invalid key");return; }//Some math$key1_sec = pack("N",$key1_num / $key1_spc);$key2_sec = pack("N",$key2_num / $key2_spc);return md5($key1_sec.$key2_sec.$l8b,1);
}
//服务器程序var crypto = require('crypto');
var WS = '258EAFA5-E914-47DA-95CA-C5AB0DC85B11';
require('net').createServer(function(o){var key;o.on('data',function(e){if(!key){//握手key = e.toString().match(/Sec-WebSocket-Key: (.+)/)[1];key = crypto.createHash('sha1').update(key + WS).digest('base64');o.write('HTTP/1.1 101 Switching Protocols\r\n');o.write('Upgrade: websocket\r\n');o.write('Connection: Upgrade\r\n');o.write('Sec-WebSocket-Accept: ' + key + '\r\n');o.write('\r\n');}else{console.log(e);};});
}).listen(8000);
websocket-php相关推荐
- mqtt+htttp+websocket
一.介绍 1.参考网址1:WebSocket协议:5分钟从入门到精通 2.参考网址2:WebSocket 教程(阮一峰) 二.应用 1.参考网址1:从 HTTP 到 MQTT:一个移动后端案例概述 2 ...
- Java后端WebSocket的Tomcat实现
转自: http://blog.chenzuhuang.com/archive/28.html http://www.cnblogs.com/xdp-gacl/p/5193279.html 一.Web ...
- Java Websocket实例【服务端与客户端实现全双工通讯】
Java Websocket实例[服务端与客户端实现全双工通讯] 现很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发 出HTTP ...
- 物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)
目录 1.HTTP和websocket 2.XMPP 3.COAP 4.MQTT协议 5.DDS 对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议 ...
- node.js创建WebSocket服务,并使用原生js ES6完成对WebSocket数据交互
注意,前情提示: 本代码基于<Node.js(nodejs)对本地JSON文件进行增.删.改.查操作(轻车熟路)> 传送门Node.js(nodejs)对本地JSON文件进行增.删.改.查 ...
- 使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容
使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容 原文:使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容 版 ...
- 使用Node.js快速搭建WebSocket server
原文地址:http://my.oschina.net/yushulx/blog/309413 目录[-] 安装 服务端 客户端 参考 安装 ? 1 npm install ws 服务端 server. ...
- python java web_Python 与 Java 使用 websocket 通信
WebSocket协议是基于TCP的一种新的网络协议.它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端. Java服务端 import java.io.IO ...
- Java项目:在线淘房系统(租房、购房)(java+SpringBoot+Redis+MySQL+Vue+SpringSecurity+JWT+ElasticSearch+WebSocket)
源码获取:博客首页 "资源" 里下载! 该系统有三个角色,分别是:普通用户.房屋中介.管理员.普通用户的功能:浏览房屋信息.预约看房.和中介聊天.申请成为中介等等.房屋中介的功能: ...
- websocket心跳链接代码_WebSocket原理与实践(五)--心跳及重连机制
在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件.这样会有:服务器会继续向客户端发送多余的链接,并且这些数据还会丢失.所以就需要 ...
最新文章
- Linux终端C语言实现图片拷贝
- Knockout 新版应用开发教程之visible绑定
- 5G NR — 基础知识
- 集群、分布式、负载均衡区别
- plaxis 2d 2020中文版
- 解决 Python pip 安装报错:Retrying (Retry(total=4, connect=None, read=None ...)) after connection
- uni.$emit和uni.$on用法;uni-app微信小程序页面通讯;微信小程序页面通讯
- 提速30倍!这个加速包让Python代码飞起来
- 【思科模拟器实验】交换机路由器基本配置
- CMFCMenuBar 的另类动态修改
- 二维卷积与一维卷积区别
- apache评分表的意义_APACHE 评分
- JAX-RS 从傻逼到牛叉 2:开发一个简单的服务
- 为什么要推销自己_推销自己:为什么? 如何!
- 《C Prime Plus》(第六版) 第05章 运算符、表达式和语句 例题集和编程练习
- c语言isfinite_visual-c-std :: isfinite在MSVC上
- 学习大数据,大数据专家写给大数据分析学习者的10个理由
- OpenCV视频篇——颜色跟踪
- vlan配置实例详解_网工知识角|MUXVLAN技术详解,基本原理一篇搞定
- 由IRR看超越方程求解