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ā),但沒有收到任何數(shù)據(jù),PHP代碼也沒有錯誤。
使用HTML5 連接數(shù)據(jù)正常。
websocket服務需要用websocket協(xié)議連接,才能通訊。
就像http協(xié)議,你要用瀏覽器通過http協(xié)議取訪問,服務端才能正確收到。
msyql數(shù)據(jù)庫服務,你要用mysql協(xié)議才能正確訪問。
直接socket連,發(fā)的數(shù)據(jù)不符合websocket通訊協(xié)議,服務端自然無法識別你發(fā)的是什么,所以收不到。
如果直接socket連,可以直接基于tcp通訊,就不要用websocket協(xié)議,
new XXX('websocket://0.0.0.0:2346');
改成
new XXX('tcp://0.0.0.0:2346');
就可以通訊了,但是會有粘包問題。
協(xié)議相關請參考workerman手冊,或者網(wǎng)上看一些文章