walkor / channel

Interprocess communication component for workerman
137 stars 49 forks source link

unserialize() always outputs PHP Warning in PHP 8.3 #14

Closed Xeath closed 3 months ago

Xeath commented 3 months ago

在 PHP 8.3 中总是输出 PHP Warning 的提示信息 截屏2024-06-10 08 26 27 经过查找,发现是 PHP 8.3 不再忽略传递给 unserialize() 数据的尾部 106616037d29c9 Workerman 社区上也有人提出这样的问题:https://www.workerman.net/q/12583

xpader commented 2 months ago

为什么尾部会有个 \n?Frame 协议应该发过来是什么数据,收到的就是什么数据,这个应该从源头解决,而不是在这里加一个 rtrim()。

Xeath commented 2 months ago

为什么尾部会有个 \n?Frame 协议应该发过来是什么数据,收到的就是什么数据,这个应该从源头解决,而不是在这里加一个 rtrim()。

Channel 在序列化数据之后就是在尾巴添加了 \n,现在只是把接收到数据的 \n 移除掉了。 我看了一下 Frame 协议好像也不需要一个换行符号去分割,有空再测试一下。

xpader commented 2 days ago

@Xeath 这个问题的根本原因是 Server 端回数据时在尾部加了 \n,这个应该要从源头解决,否则在一个问题上打了个补丁不是修复了这个问题,而是遮住了这个问题。

Xeath commented 1 day ago

@Xeath 这个问题的根本原因是 Server 端回数据时在尾部加了 \n,这个应该要从源头解决,否则在一个问题上打了个补丁不是修复了这个问题,而是遮住了这个问题。

https://github.com/walkor/channel/blob/master/src/Server.php#L117

你提交个 PR 吧。

我是觉得客户端移除应该是更加合理,因为这样可以更好兼容新老版本的服务端。

xpader commented 1 day ago

@Xeath 我后面有空来个大的优化性能及二进制兼容性的 PR,到时候把这个顺便一起改了。