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