JavaScript和WebSockets:使用特定协议

我目前正在使用WebSockets和 PHP服务器:它适用于谷歌Chrome和Opera,但不适用于Firefox 6.

我认为这是由于最后一次使用的协议版本:我看到它使用的是第七版,而对于Google Chrome和Opera来说它是较旧版本.

因此,我修改了我的服务器代码以管理这个新版本:通过使用258EAFA5-E914-47DA-95CA-C5AB0DC85B11和其他东西散列安全密钥,Firefox成功连接.
但是如果另一个客户想要连接(甚至是另一个Firefox),那么第一个用Firefox连接自己.

我看到socket_recv()收到的缓冲区为空或散列…

所以我决定跳过管理Firefox 6使用的协议的想法(互联网上没有文档……!):我认为指定直接在JavaScript中使用的协议可能更容易.

this page他们说我们可以这样写:

var mySocket = new WebSocket("http://www.example.com/socketserver","my-custom-protocol");

但是为了使用Google Chrome和Opera管理的协议,我们应该编写什么而不是“my-custom-protocol”?

提前致谢!

解决方法

WebSocket构造函数的协议选项实际上是一个“子协议”(通常由该名称调用),它是一个应用程序级子协议.它对实际的WebSocket协议版本没有任何影响.浏览器基本上支持单个版本的WebSocket协议本身.大多数服务器都支持多种版本的协议.

Firefox 6.0引入了对新HyBi系列协议的支持(HyBi-00实际上只是Hixie-76协议的一个副本). HyBi版本为数据引入了新的帧格式,而不仅仅是对握手的改变. Chrome 14还使用了新的HyBi协议系列.

这是最新版本的WebSockets协议:http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-14尽管firefox 6.0实际上是这一个http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07,但实际上没有那么多真正的变化(主要是对规范本身的文本更改).

你确定firefox连接成功(即你实际上是否在浏览器中获得了一个onopen事件)?

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...