⑴ php服務端使用WebSocket客戶端Android用什麼 Socket可以嗎
理論上客戶端也是需要用socket的,socket是tcp/udp協議通信的,過程比較繁瑣。
為何不採用基於http協議的webservice呢
⑵ phpwebsocket怎麼直接在socket連接上時返回數據
那是因為,還沒有握手成功,並且這個 in 的處理不是針對客戶端的是針對服務端的
這樣修改
在 websocket.class.php 添加這兩行
if(!$this->users[$k]['hand']){//沒有握手進行握手
$this->handshake($k,$buffer);
$eventreturn = array('k'=>$k,'sign'=>$sign);
$this->eventoutput('handsuccess',$eventreturn);
}
在 server.php 加一個elseif
}elseif('handsuccess'==$type){
//第一次握手成功
$websocket->write($event['sign'],'welcome');
}
⑶ php 怎麼使用websocket推送消息
我使用的工具是基於wokman的web-msg-sender是一款web長連接推送框架,採用PHPSocket.IO開發,基於WebSocket長連接通訊,如果瀏覽器不支持WebSocket則自動轉用comet推送。 通過後台推送消息,消息可以即時推送到客戶端,非輪詢,實時性非常好,性能很高。
下載和demo地址http://www.workerman.net/web-sender
這裡面區分服務端和客戶端,去上面地址下載源代碼,放到你服務端。使用相關命令開啟服務。
其中有一個文件是start_io.php,這個文件算是核心,裡面有怎麼發送socket消息的代碼,也會有監控用戶上下線的介面,在這個地方可以根據業務需要拓展自己的代碼需求。類似:用戶在socket檢測用戶上下線的是時候,可以http請求到自己的api層
下面我貼一下我的代碼
這個地方明確表明了監聽埠,websocket跟api在同一個伺服器上面,所以用了0.0.0.0,所以你在http服務端如果想發消息給客戶端,只需要發送到這個埠上面,socket自動會監聽到發送給客戶端。
⑷ 本質就是websocket的客戶端,php Websocket 怎麼接收數據
流程:
監聽埠
接受連接
進行websocket握手
握手成功後的連接進行數據處理
返回響應數據 class WebsocketClient { private $_Socket = null; public function __construct($host, $port) { $this->_connect($host, $port); } public function __destruct() { $this->_disconnect(); } public function sendData($data) {我推薦你去後盾人上面看看裡面有很多關於這類php之類的教學視頻哦⊙∀⊙!,視頻講解高質量
⑸ php websocket連接報錯怎麼解決
php websocket連接報錯一般是握手連接失敗導致。
php 用websocket,從連接、建立、綁定、監聽等,這些都需要手動去操作。配置錯誤會導致無法連接。
下面是client和server端建立websocket連接示意圖:
解析:
1、PHP 中處理 WEBSOCKET
WebSocket 連接是由客戶端主動發起的,所以一切要從客戶端出發。第一步是要解析拿到客戶端發過來的 Sec-WebSocket-Key 字元串。
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: .com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
2、提取 SEC-WEBSOCKET-KEY 信息
function getKey($req) {
$key = null;
if (preg_match("/Sec-WebSocket-Key: (.*)/r/n/", $req, $match)) {
$key = $match[1];
}
return $key;
}
3、加密 SEC-WEBSOCKET-KEY
function encry($req){
$key = $this->getKey($req);
$mask = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
return base64_encode(sha1($key . '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
}
以上任何一個環節出錯都會導致失敗。
⑹ 如何用php實現websocket
websocket需要php監聽一個固定的埠,而不是請求的時候再去執行 一般的主機服務無法實現此功能 如果你有伺服器的設置許可權,可以在伺服器上用php命令開啟埠,再用nginx做一個Websocket代理 大多數虛擬主機服務商是不支持自己配置伺服器的
⑺ PHP websocket 里有類似 JS websocket.send()函數嗎
<?php
useWorkermanWorker;
require_once'./Workerman/Autoloader.php';
//創建一個Worker監聽2346埠,使用websocket協議通訊
$ws_worker=newWorker("websocket://0.0.0.0:2346");
//啟動4個進程對外提供服務
$ws_worker->count=4;
//當收到客戶端發來的數據後
$ws_worker->onMessage=function($connection,$data)
{
//列印json格式的數據
var_export(json_decode($data));
//返回json格式的數據
$connection->send(json_encode(array('name'=>'lilei','age'=>18)));
};
//運行worker
Worker::runAll();
這個是workerman的一個示例,可以看下
⑻ 本質就是websocket的客戶端,php Websocket 怎麼接收數據
<?php
//error_reporting(E_ALL);
echo "<h2>tcp/ip connection </h2>\n";
$service_port = 10005;
$address = '127.0.0.1';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "\n";
} else {
echo "OK. \n";
}
echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if($result === false) {
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror(socket_last_error($socket)) . "\n";
} else {
echo "OK \n";
}
$in = "HEAD / http/1.1\r\n";
$in .= "HOST: localhost \r\n";
$in .= "Connection: close\r\n\r\n";
$out = "";
echo "sending http head request ...";
socket_write($socket, $in, strlen($in));
echo "OK\n";
echo "Reading response:\n\n";
while ($out = socket_read($socket, 8192)) {
echo $out;
}
//echo "closeing socket..";
//socket_close($socket);
//echo "ok .\n\n";
<?php
error_reporting(E_ALL);
set_time_limit(0);
//ob_implicit_flush();
$address = '127.0.0.1';
$port = 10005;
//創建埠
if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed :reason:" . socket_strerror(socket_last_error()) . "\n";
die;
}
//綁定
if (socket_bind($sock, $address, $port) === false) {
echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
die;
}
//監聽
if (socket_listen($sock, 5) === false) {
echo "socket_bind() failed :reason:" . socket_strerror(socket_last_error($sock)) . "\n";
die;
}
do {
//得到一個鏈接
if (($msgsock = socket_accept($sock)) === false) {
echo "socket_accepty() failed :reason:".socket_strerror(socket_last_error($sock)) . "\n"; break;
}
//welcome 發送到客戶端
$msg = "server send:welcome!";
socket_write($msgsock, $msg, strlen($msg));
echo 'read client message\n';
$buf = socket_read($msgsock, 8192);
$talkback = "received message:$buf\n";
echo $talkback;
if (false === socket_write($msgsock, $talkback, strlen($talkback))) {
echo "socket_write() failed reason:" . socket_strerror(socket_last_error($sock)) ."\n";
} else {
echo 'send success';
}
//socket_close($msgsock);
} while(true);
//關閉socket
socket_close($sock);
⑼ 如何用PHP實現基於websocket的實時通訊
哈哈,過了這么幾年了,websocket已經相當穩定和成熟了。
各大瀏覽器都對websocket有了很好的支持,目前微信小程序也支持websocket協議了,那些說websocket不穩定的可以暫時歇一歇了。
如果是自己開發websocket服務,可以用swoole等來實現,不過要做好還是需要花很多時間和精力的。
你可以試試【GoEasy】提供的websocket推送服務,目前算是比較流行的一款websocket推送框架,穩定性還不錯,對多種前後端都有很好的支持的。