具有PHP7.2和Apache的简单Websocket服务器:socket_read格式

时间:2019-04-27 06:22:56

标签: php apache websocket

大家早上好,

我似乎有一个使我发疯的问题,因为我绝对不知道在哪里搜索。

要获得Websocket的经验,我想使用PHP和Apache设置Websocket服务器。通过结合以下解决方案:

https://medium.com/@cn007b/super-simple-php-websocket-example-ea2cd5893575

https://www.php.net/manual/de/sockets.examples.php

我能够获得一个正常工作的echo服务器。这意味着我可以从浏览器发送一条消息,服务器可以对此消息进行答复。这是代码段。

do {
if (false === ($buf = socket_read($client,2048))) {
   echo "socket_read() fehlgeschlagen: Grund: " .  socket_strerror(socket_last_error($client)) . "\n";
   break 2;
}
echo $buf; // <--- this line shows "crypted" text
socket_write ($client, $buf, strlen ($buf));
} while (true);

我使用php websocket.php在控制台中启动此服务器,而Apache中的Proxy转发了请求。

我的问题是,变量$ buf以某种方式被加密,二进制,压缩或错误编码。它提供了不可读的标志:

??ǐl??????

将其发送回浏览器后,所有内容都是人类可读的。我研究了互联网和stackoverflow上的许多帖子。我不知道从哪里开始,因为从文档中它说应该是一个字符串。我在互联网上找到的所有示例都不需要特别关心“翻译”这个$ buf字符串,因此我完全困惑在哪里搜索:​​Apache?,PHP.ini ?、控制台,编码,解压缩

根据我阅读的内容,我做了一些实验:

//$talkback = "PHP: Sie haben '$buf' eingegeben.\n";
//var_dump(mb_convert_encoding($buf,"UTF-8"));
//$unpacked = unpack('Clength',socket_read($client,1));
//var_export($unpacked);
//$msg = socket_read($client, $unpacked['length']);
//echo implode(array_map("chr", $msg));

但是没有成功。你能帮我吗?

更新:

经过一整夜的睡眠,我找到了正确的问题,然后很快找到了答案:

解释的起点:

Decoding network chars (HTML5 Websocket)

解码示例:

HTML5 WebSocket with hybi-17

以及用于编码/解码的代码示例:

http://www.abrandao.com/2013/06/websockets-html5-php/

0 个答案:

没有答案