> 백엔드 개발 > PHP 튜토리얼 > html5 - 用 php 写了个 WebSocket 服务端,在 IE 下出现了问题

html5 - 用 php 写了个 WebSocket 服务端,在 IE 下出现了问题

WBOY
풀어 주다: 2016-06-06 20:12:55
원래의
1071명이 탐색했습니다.

在火狐运行正常, IE 和 chrome 却出现问题。
IE 下握手成功后, send()信息给服务端,服务端用 socket_write 原样返回信息给 IE 触发不了 onmessage 事件,反而触发了 onclose 事件。这几天一直在为这个问题烦恼。
有大神可以为在下解答吗
chrome的截图
下方的红字是:WebSocket connection to 'ws://127.0.0.1:1199' failed: A server must not mask any frame taht ie send to the client.
html5 - 用 php 写了个 WebSocket 服务端,在 IE 下出现了问题

百度里找到位和我一样问题的人:
send函数是指socket_send或socket_write吗?如果是$mask参数在哪?
html5 - 用 php 写了个 WebSocket 服务端,在 IE 下出现了问题

回复内容:

在火狐运行正常, IE 和 chrome 却出现问题。
IE 下握手成功后, send()信息给服务端,服务端用 socket_write 原样返回信息给 IE 触发不了 onmessage 事件,反而触发了 onclose 事件。这几天一直在为这个问题烦恼。
有大神可以为在下解答吗
chrome的截图
下方的红字是:WebSocket connection to 'ws://127.0.0.1:1199' failed: A server must not mask any frame taht ie send to the client.
html5 - 用 php 写了个 WebSocket 服务端,在 IE 下出现了问题

百度里找到位和我一样问题的人:
send函数是指socket_send或socket_write吗?如果是$mask参数在哪?
html5 - 用 php 写了个 WebSocket 服务端,在 IE 下出现了问题

IE 下握手成功后, send()信息给服务端, 服务器端可以打印出来这个信息吗?

建议先chrome上试试,IE上可能略怪,socket可能会被降级成别的方式

http://stackoverflow.com/questions/16932...

随便返回个其他的字符串试试看

现在版本(13)的websocket是会把客户端send()的信息做mask处理,据说是转换成二进制,然后传给服务端。所以服务端要是直接echo客户端传来的信息是会显示乱码的。想要正常显示要转换,同样服务端传给客户端的信息也要经过处理,具体原理我还不是很清楚,这是我花费了几天所总结出的答案,具体过程要看网上给出的例子。
ps:果然英语对程序员来说很重要。

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿