function SendSocketMsg(){
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket,'127.0.0.1', 2346);
/*
if ($result == false)
{
echo 'connect error!';
return false;
}
*/
$msg = '@hello socket11111';
if (socket_write($socket, $msg, strlen($msg)) === false)
{
echo "socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n";
return false;
}
//$recv_data = socket_read($socket,1024);
socket_close ($socket);
//return $recv_data;
}
SendSocketMsg();
workerman中 onConnect 可以觸發(fā),但沒(méi)有收到任何數(shù)據(jù),PHP代碼也沒(méi)有錯(cuò)誤。
使用HTML5 連接數(shù)據(jù)正常。
websocket服務(wù)需要用websocket協(xié)議連接,才能通訊。
就像http協(xié)議,你要用瀏覽器通過(guò)http協(xié)議取訪問(wèn),服務(wù)端才能正確收到。
msyql數(shù)據(jù)庫(kù)服務(wù),你要用mysql協(xié)議才能正確訪問(wèn)。
直接socket連,發(fā)的數(shù)據(jù)不符合websocket通訊協(xié)議,服務(wù)端自然無(wú)法識(shí)別你發(fā)的是什么,所以收不到。
如果直接socket連,可以直接基于tcp通訊,就不要用websocket協(xié)議,
new XXX('websocket://0.0.0.0:2346');
改成
new XXX('tcp://0.0.0.0:2346');
就可以通訊了,但是會(huì)有粘包問(wèn)題。
協(xié)議相關(guān)請(qǐng)參考workerman手冊(cè),或者網(wǎng)上看一些文章