⑴ 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推送框架,稳定性还不错,对多种前后端都有很好的支持的。