用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,不知问题在哪。请指教,谢谢。
你开的是http协议的端口,然后用telnet访问,发送的数据不符合http协议格式,估计算是非法数据格式,所以连接断开了。
改成
试下。
也就是用tcp协议
不好意思,刚才是我疏忽,没有说到这个。我发帖前已经像你说的,改成tcp协议的了。我的目的也是使用tcp协议的。就是这个连接会断。数据能正常的在服务器和客户端传递的。
debug方式运行看下是不是有报错。
如果不行就直接用workerman试下,排除tp问题。
搞定了。谢谢
两边的代码都完整贴出来,代码正常不会这样的,这种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。