我目前正在使用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事件)?