<?php
class iwanttolive extends Man\Core\SocketWorker
{
/**
* 確定包是否完整 return 0:完整 return X:還有X字節(jié)沒(méi)有接收完
*/
public function onStart()
{
echo'啟動(dòng)';
global $suoyoushuju;
$suoyoushuju=array();
}
public function dealInput($buffer)
{
// 如果最后一個(gè)字符是\n代表數(shù)據(jù)讀取完整,返回0
if($buffer === "\n")
{
return 0;
}
// 說(shuō)明還有請(qǐng)求數(shù)據(jù)沒(méi)收到,但是由于不知道還有多少數(shù)據(jù)沒(méi)收到,所以只能返回1,因?yàn)橛锌赡芟乱粋€(gè)字符就是\n
return 1;
}
/**
* 處理業(yè)務(wù),當(dāng)客戶(hù)端數(shù)據(jù)接收完畢后觸發(fā)(這里只是將客戶(hù)端發(fā)來(lái)的字符串直接會(huì)寫(xiě)到客戶(hù)端)
*/
public function dealProcess($buffer)
{
// $bufferss=str_replace("\n","",$buffer);
$bufferss=trim($buffer);
global $suoyoushuju;
$fanhui=array();
array_push($suoyoushuju,$bufferss);
echo '初始化所有數(shù)據(jù)';
print_r($suoyoushuju);
$ww=explode('&',$bufferss);
$www=$ww;
foreach ($suoyoushuju as $value) {
echo '索引'.$www;
echo '搜索范圍'.$value;
if(strpos($value, $www)!=-1)
{
array_push($fanhui,$value);
echo'符合條件的放入$fangzhu數(shù)組';
print_r($fanhui);
}
else
{
echo '沒(méi)搜索到相應(yīng)數(shù)據(jù)';
}
}
return $this->sendToClient$fanhui);
}
}
?>
比方說(shuō)每次客戶(hù)端發(fā)送字符串給服務(wù)端 1234&few
服務(wù)端接收后放到$suoyoushuju
然后來(lái)遍歷$suoyoushuju 是否包含1234 如果有 就添加到$fanhui 這個(gè)再發(fā)回客戶(hù)端
上面代碼我運(yùn)行了下。。。
明顯沒(méi)按照我的邏輯么第一次還會(huì)運(yùn)行初始化 第二次發(fā)送就沒(méi)有了。。。
你的程序中有兩處錯(cuò)誤
if(strpos($value, $www)!=-1)
strpos 永遠(yuǎn)不會(huì)返回-1,返回值只有可能false或者不小于0的整數(shù)
return $this->sendToClient$fanhui);
這句有語(yǔ)法錯(cuò)誤
并且sendToClient參數(shù)只能是字符串,否則會(huì)報(bào)錯(cuò)
上面兩個(gè)錯(cuò)誤解決后通過(guò)telnet測(cè)試(我開(kāi)的是7473端口)運(yùn)行結(jié)果如下
telnet 127.0.0.1 7473
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
1234&few
array (
0 => '1234&few',
)1234&few
array (
0 => '1234&few',
1 => '1234&few',
)1234&few
array (
0 => '1234&few',
1 => '1234&few',
2 => '1234&few',
)
結(jié)果應(yīng)該是你預(yù)期的
<?php
class iwanttolive extends Man\Core\SocketWorker
{
/**
* 確定包是否完整 return 0:完整 return X:還有X字節(jié)沒(méi)有接收完
*/
public function onStart()
{
echo'啟動(dòng)';
global $suoyoushuju;
$suoyoushuju=array();
}
public function dealInput($buffer)
{
// 如果最后一個(gè)字符是\n代表數(shù)據(jù)讀取完整,返回0
if($buffer === "\n")
{
return 0;
}
// 說(shuō)明還有請(qǐng)求數(shù)據(jù)沒(méi)收到,但是由于不知道還有多少數(shù)據(jù)沒(méi)收到,所以只能返回1,因?yàn)橛锌赡芟乱粋€(gè)字符就是\n
return 1;
}
/**
* 處理業(yè)務(wù),當(dāng)客戶(hù)端數(shù)據(jù)接收完畢后觸發(fā)(這里只是將客戶(hù)端發(fā)來(lái)的字符串直接會(huì)寫(xiě)到客戶(hù)端)
*/
public function dealProcess($buffer)
{
// $bufferss=str_replace("\n","",$buffer);
$bufferss=trim($buffer);
global $suoyoushuju;
$fanhui=array();
array_push($suoyoushuju,$bufferss);
echo '初始化所有數(shù)據(jù)';
print_r($suoyoushuju);
$ww=explode('&',$bufferss);
$www=$ww;
foreach ($suoyoushuju as $value) {
echo '索引'.$www;
echo '搜索范圍'.$value;
if(strpos($value, $www)!=false)
{
array_push($fanhui,$value);
echo'符合條件的放入$fangzhu數(shù)組';
print_r($fanhui);
}
else
{
echo '沒(méi)搜索到相應(yīng)數(shù)據(jù)';
}
}
return $this->sendToClient(json_encode($fanhui));
}
}
?>
還是不行
啟動(dòng)啟動(dòng)啟動(dòng)啟動(dòng)啟動(dòng)初始化所有數(shù)據(jù)
Array
(
=> 2134&dw
)
索引2134搜索范圍2134&dw符合條件的放入$fangzhu數(shù)組
Array
(
=> 2134&dw
)
初始化所有數(shù)據(jù)
Array
(
=> 2134&dw
=> 12345&fe
)
索引12345搜索范圍2134&dw符合條件的放入$fangzhu數(shù)組
Array
(
=> 2134&dw
)
索引12345搜索范圍12345&fe符合條件的放入$fangzhu數(shù)組
Array
(
=> 2134&dw
=> 12345&fe
)
為什么第二次 初始化所有數(shù)據(jù)這個(gè)不會(huì)運(yùn)行了
效果也是錯(cuò)的
輸入12345&fe 應(yīng)該是
array
(
=> 12345&fe
)
索引12345搜索范圍12345&fe符合條件的放 如
=> 2134&dw 這個(gè)2134明顯沒(méi)符合條件怎么也放入了