PHPSocket.IO知识学习整理

PHPSocket.IO知识学习整理
双模具⼀、服务端客户端连接
1、创建⼀个SocketIO服务端
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;
// 创建socket.io服务端,监听3120端⼝
$io = new SocketIO(3120);
// 当有客户端连接时打印⼀⾏⽂字
$io->on('connection', function($socket)use($io){
echo "new connection coming\n";
});
Worker::runAll();
2、创建⼀个客户端
<script src='cdn.bootcss/socket.io/2.0.3/socket.io.js'></script>
<script>
// 如果服务端不在本机,请把127.0.0.1改成服务端ip
var socket = io('127.0.0.1:3120');
// 当连接服务端成功时触发connect默认事件
<('connect', function(){
油泵法兰
console.log('connect success');
});
</script>
⼆、⾃定义事件
socket.io主要是通过事件来进⾏通讯交互的。
socket连接除了⾃带的connect,message,disconnect三个事件以外,在服务端和客户端开发者可以⾃定义其它事件。
热转印烤杯机服务端和客户端都通过emit⽅法触发对端的事件。
例如下⾯的代码在服务端定义了⼀个chat message事件,事件参数为$msg。
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;
机器人移动底盘
$io = new SocketIO(3120);
// 当有客户端连接时
$io->on('connection', function($socket)use($io){
// 定义chat message事件回调函数
$socket->on('chat message', function($msg)use($io){
// 触发所有客户端定义的chat message from server事件
$io->emit('chat message from server', $msg);
});
});
Worker::runAll();
客户端通过下⾯的⽅法触发服务端的chat message事件。
<script src='//cdn.bootcss/socket.io/1.3.7/socket.io.js'></script>
<script>
// 连接服务端
var socket = io('127.0.0.1:3120');
// 触发服务端的chat message事件
// 服务端通过emit('chat message from server', $msg)触发客户端的chat message from server事件
<('chat message from server', function(msg){
console.log('get message:' + msg + ' from server');
});
</script>
三、workerStart事件
phpsocket.io提供了workerStart事件回调,也就是当进程启动后准备好接受客户端链接时触发的回调。⼀个进程⽣命周期只会触发⼀次。可以在这⾥设置⼀些全局的事情,⽐如开⼀个新的Worker端⼝等等。
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;
$io = new SocketIO(9120);
// 监听⼀个http端⼝,通过http协议访问这个端⼝可以向所有客户端推送数据(url类似ip:9191?msg=xxxx)
$io->on('workerStart', function()use($io) {
$inner_http_worker = new Worker('0.0.0.0:9191');
$inner_http_worker->onMessage = function($http_connection, $data)use($io){
if(!isset($_GET['msg'])) {
return$http_connection->send('fail, $_GET["msg"] not found');
}
$io->emit('chat message', $_GET['msg']);
$http_connection->send('ok');
};
$inner_http_worker->listen();
});
// 当有客户端连接时
$io->on('connection', function($socket)use($io){
/
柔性电路/ 定义chat message事件回调函数
$socket->on('chat message', function($msg)use($io){
// 触发所有客户端定义的chat message from server事件
$io->emit('chat message from server', $msg);
});
流化床});
Worker::runAll();
四、分组
socket.io提供分组功能,允许向某个分组发送事件,例如向某个房间⼴播数据。
1、加⼊分组(⼀个连接可以加⼊多个分组)
$socket->join('group name');
2、离开分组(连接断开时会⾃动从分组中离开)
$socket->leave('group name');
五、向客户端发送事件的各种⽅法
$io是SocketIO对象。$socket是客户端连接
$data可以是数字和字符串,也可以是数组。当$data是数组时,客户端会⾃动转换为javascript对象。
同理如果客户端向服务端emit某个事件传递的是⼀个javascript对象,在服务端接收时会⾃动转换为php数组。
1、向当前客户端发送事件
$socket->emit('event name', $data);
2、向所有客户端发送事件
$io->emit('event name', $data);
3、向所有客户端发送事件,但不包括当前连接。
$socket->broadcast->emit('event name', $data);
4、向某个分组的所有客户端发送事件
$io->to('group name')->emit('event name', $data);
六、获取客户端ip
$io->on('connection', function($socket)use($io){
var_dump($socket->conn->remoteAddress);
});
七、关闭链接
$socket->disconnect();
⼋、限制连接域名
当我们想指定特定域名的页⾯才能连接,可以⽤$io->origins⽅法来设置域名⽩名单。
$io = new SocketIO(2020);
$io->origins('example:8080');
多个域名时⽤空格分隔,类似
$io = new SocketIO(2020);
$io->origins('workerman www.workerman');
九、⽀持SSL(https wss)
SSL⽀持有两种⽅法,workerman原⽣和nginx代理
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;
/
/ 传⼊ssl选项,包含证书的路径
$context = array(
'ssl' => array(
'local_cert'  => '/your/path/of/server.pem',
'local_pk'    => '/your/path/of/server.key',
'verify_peer' => false,
)
);
$io = new SocketIO(2120, $context);
$io->on('connection', function($socket)use($io){
echo "new connection coming\n";
});
Worker::runAll();
注意:
1、证书是要验证域名的,所以客户端链接时要指定域名才能顺利的建⽴链接。
2、客户端连接时不能再⽤http⽅式,要改成https类似下⾯这样。
<script>
var socket = io('yoursite:2120');
//.....
</script>

本文发布于:2024-09-22 01:06:30,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/147743.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:客户端   服务端   事件   连接
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议