使用tp6手册workerman代码,客户端和服务器连接一次后断开,closed by foreign host

0

用tp6+worker,tcp连接,要保持长连接。用的是tp6开发手册workerman一节的代码。
<?php
namespace app\http;


use think\worker\Server;


class Worker extends Server
{
protected $socket = 'http://0.0.0.0:2346'; (此处我已经改成tcp协议tcp://0.0.0.0:2345)


public function onMessage($connection,$data)
{
$connection->send(json_encode($data));
}

}


客户端用xshell,
期待结果的是telnet连接后,服务器和客户端保持一段时间的长连接。
实际结果是:telnet连接,只互相传递一次消息,接到服务器消息返回后,就断了,closed by foreign host。


期待长连接,我看workman的视频教程,也是简单的代码,没加onclose是不会断开的。初接触workman,不知问题在哪。请指教,谢谢。

微信图片_20210622145544.jpg
已邀请:

xiuwang

赞同来自:

你开的是http协议的端口,然后用telnet访问,发送的数据不符合http协议格式,估计算是非法数据格式,所以连接断开了。


protected $socket = 'http://0.0.0.0:2346';

改成


protected $socket = 'tcp://0.0.0.0:2346';

试下。
也就是用tcp协议

xiuwang

赞同来自:

debug方式运行看下是不是有报错。
如果不行就直接用workerman试下,排除tp问题。

2548a

赞同来自:

两边的代码都完整贴出来,代码正常不会这样的,这种99%还是你代码问题,还有,有可能是因为你哪边报错重启导致断开了

左补阙

赞同来自:

问题终于搞定。操作步骤如下:
1.直接搭建一个纯workman项目,运行,没问题;
2.搭建一个新的tp+worker项目,运行,出现问题,还是closed by foreign host;
这时开始怀疑是php版本和tp的兼容问题,因为我linux默认用的是php8.0。用小皮面板+tp项目,如果选择php8版本也是运行不起来的。
3.把我linux的默认php版本8.0卸载,装回7.4.
4 重启,终于运行成功。


具体原因不清楚,也没改什么代码。确实是搞定了。谢谢协助的大佬,xiuwang,2548a。

要回复问题请先登录注册