用tp6+worker,tcp連接,要保持長連接。用的是tp6開發(fā)手冊(cè)workerman一節(jié)的代碼。
<?php
namespace app\http;
use think\worker\Server;
class Worker extends Server
{
protected $socket = 'http://0.0.0.0:2346'; (此處我已經(jīng)改成tcp協(xié)議tcp://0.0.0.0:2345)
public function onMessage($connection,$data)
{
$connection->send(json_encode($data));
}
}
客戶端用xshell,
期待結(jié)果的是telnet連接后,服務(wù)器和客戶端保持一段時(shí)間的長連接。
實(shí)際結(jié)果是:telnet連接,只互相傳遞一次消息,接到服務(wù)器消息返回后,就斷了,closed by foreign host。
期待長連接,我看workman的視頻教程,也是簡(jiǎn)單的代碼,沒加onclose是不會(huì)斷開的。初接觸workman,不知問題在哪。請(qǐng)指教,謝謝。
你開的是http協(xié)議的端口,然后用telnet訪問,發(fā)送的數(shù)據(jù)不符合http協(xié)議格式,估計(jì)算是非法數(shù)據(jù)格式,所以連接斷開了。
protected $socket = 'http://0.0.0.0:2346';
改成
protected $socket = 'tcp://0.0.0.0:2346';
試下。
也就是用tcp協(xié)議
不好意思,剛才是我疏忽,沒有說到這個(gè)。我發(fā)帖前已經(jīng)像你說的,改成tcp協(xié)議的了。我的目的也是使用tcp協(xié)議的。就是這個(gè)連接會(huì)斷。數(shù)據(jù)能正常的在服務(wù)器和客戶端傳遞的。
問題終于搞定。操作步驟如下:
1.直接搭建一個(gè)純workman項(xiàng)目,運(yùn)行,沒問題;
2.搭建一個(gè)新的tp+worker項(xiàng)目,運(yùn)行,出現(xiàn)問題,還是closed by foreign host;
這時(shí)開始懷疑是php版本和tp的兼容問題,因?yàn)槲襩inux默認(rèn)用的是php8.0。用小皮面板+tp項(xiàng)目,如果選擇php8版本也是運(yùn)行不起來的。
3.把我linux的默認(rèn)php版本8.0卸載,裝回7.4.
4 重啟,終于運(yùn)行成功。
具體原因不清楚,也沒改什么代碼。確實(shí)是搞定了。謝謝協(xié)助的大佬,xiuwang,2548a。