当前位置:首页 » 编程语言 » phpwebsocket

phpwebsocket

发布时间: 2022-04-03 04:23:36

1. php websocket 线上怎么链接

在连接之前需要知道一下几点: 1、了解websocket的协议和请求规范;2、使用PHP的socket函数库来处理websocket的请求;3、处理websocket的数据郑下面是我写的一个小例子,里面的注释我觉得也挺详细的了,对帧的处理我没有完善

2. 本质就是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);

3. php websocket需要什么扩展

php有可用的websocket库,不需要php-fpm。
目前比较成熟的有swoole(swoole.com),和workman(workman.net)
swoole是c写的php扩展, 效率比nodejs还要高,workman是纯php实现,两者都号称可以实现并发百万TCP连接。

4. 如何用php实现websocket

websocket需要php监听一个固定的端口,而不是请求的时候再去执行 一般的主机服务无法实现此功能 如果你有服务器的设置权限,可以在服务器上用php命令开启端口,再用nginx做一个Websocket代理 大多数虚拟主机服务商是不支持自己配置服务器的

5. 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');
}

6. 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的一个示例,可以看下

7. php Websocket问题

连接已重置,当前请求被重定向到了另外一个地址,看network返回的header信息来分析

8. 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));
}

以上任何一个环节出错都会导致失败。

9. php websocket到底怎么用难道服务端只能用命令行来运行php文件服务端正常应该是怎么工作的

其实就是响应一次HTTP请求,在类文件内部会分析请求的来源,安全性,完整性

热点内容
蒙皮算法 发布:2025-01-18 12:57:53 浏览:549
常用的r语言编译器 发布:2025-01-18 12:55:05 浏览:199
同人志解压密码 发布:2025-01-18 12:55:05 浏览:876
qq密码不记得怎么办 发布:2025-01-18 12:48:22 浏览:448
安卓系统停用怎么办 发布:2025-01-18 12:35:49 浏览:260
五菱宏光星辰哪个配置最值得买 发布:2025-01-18 12:29:43 浏览:595
鸿蒙系统为什么完美兼容安卓应用 发布:2025-01-18 12:16:02 浏览:856
数分转算法 发布:2025-01-18 12:08:31 浏览:612
iphone硬件为什么比安卓更好 发布:2025-01-18 12:08:29 浏览:822
医院冷热源配置有哪些 发布:2025-01-18 12:08:26 浏览:167