Heim >Backend-Entwicklung >PHP-Tutorial >html5 - 用 php 写了个 WebSocket 服务端,在 IE 下出现了问题

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

WBOY
WBOYOriginal
2016-06-06 20:12:551075Durchsuche

在火狐运行正常, 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:果然英语对程序员来说很重要。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn