一、服务端和客户端连接
1、创建一个socketio服务端
<?phprequire_once __dir__ . '/vendor/autoload.php';u workerman\worker;u phpsocketio\socketio;// 创建socket.io服务端,监听3120端口$io = new socketio(3120);// 当有客户端连接时打印一行文字$io->on('connection', function($socket)u($io){ echo "new connection coming\n";});worker::runall();
2、创建一个客户端
<script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script><script>// 如果服务端不在本机,请把127.0.0.1改成服务端ipvar socket = io('http://127.0.0.1:3120');// 当连接服务端成功时触发connect默认事件socket.on('connect', function(){ console.log('connect success');});</script>
二、自定义事件
socket.io主要是通过事件来进行通讯交互的。
socket连接除了自带的connect,message,disconnect三个事件以外,在服务端和客户端开发者可以自定义其它事件。
服务端和客户端都通过emit方法触发对端的事件。
例如下面的代码在服务端定义了一个chat message
事件,事件参数为$msg
。
<?phprequire_once __dir__ . '/vendor/autoload.php';u workerman\worker;u phpsocketio\socketio;$io = new socketio(3120);// 当有客户端连接时$io->on('connection', function($socket)u($io){ // 定义chat message事件回调函数 $socket->on('chat message', function($msg)u($io){ // 触发所有客户端定义的chat message from rver事件 $io->emit('chat message from rver', $msg); });});worker::runall();
客户端通过下面的方法触发服务端的chat message事件。
<script src='//cdn.bootcss.com/socket.io/智利火玫瑰1.3.7/socket.io.js'></script><西域男孩告别演唱会script>// 连接服务端var socket = io('http://127.0.0.1:3120');// 触发服务端的chat message事件socket.emit('chat message', '这个是消息内容...');// 服务端通过emit('chat message from rver', $msg)触发客户端的chat message fro分式方程解法m rver事件socket.on('chat message from rver', function(msg){ console.log('get message:' + msg + ' from rver');});</script>
三、workerstart事件
phpsocket.io提供了workerstart事件回调,也就是当进程启动后准备好接受客户端链接时触发的石家庄中学回调。 一个进程生命周期只会触发一次。可以在这里设置一些全局的事情,比如开一个新的worker端口等等。
require_once __dir__ . '/vendor/autoload.php';u workerman\worker;u phpsocketio\socketio;$io = new socketio(9120);// 监听一个http端口,通过http协议访问这个端口可以向所有客户端推送数据(url类似http://ip:9191?msg=xxxx)$io->on('workerstart', function()u($io) { $inner_http_worker = new worker('http://0.0.0.0:9191'); $inner_http_worker->onmessage = function($http_connection, $data)u($io){ if(!ist($_get['msg'])) { return $http_connection->nd('fail, $_get["msg"] not found'); } $io->emit('chat message', $_get['msg']); $http_connection->nd('ok'); }; $inner_http_worker->listen();});// 当有客户端连接时$io->on('connection', function($socket)u($io){ // 定义chat message事件回调函数 $socket->on('chat message', function($msg)u($io){ // 触发所有客户端定义的chat message from rver事件 $io->emit('chat message from rver', $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)u($io){ var_dump($socket->conn->remoteaddress);});
七、关闭链接
$socket->disconnect();
八、限制连接域名
当我们想指定特定域名的页面才能连接,可以用$io->origins方法来设置域名白名单。
$io = new socketio(2020);$io->origins('http://example.com:8080');
多个域名时用空格分隔,类似
$io = new socketio(2020);$io->origins('/d/file/titlepic/ http://www.workerman.net');
九、支持ssl(https wss)
ssl支持有两种方法,workerman原生和nginx代理
<?phprequire_once __dir__ . '/vendor/autoload.php';u workerman\worker;u phpsocketio\socketio;// 传入ssl选项,包含证书的路径$context = array( 'ssl' => array( 'local_cert' => '/your/path/of/rver.pem', 'local_pk' => '/your/path/of/rver.key', 'verify_peer' => fal, ));$io = new socketio(2120, $context);$io->on('connection', function($socket)u($io){ echo "new connection coming\n";});worker::runall();
注意:
1、证书是要验证域名的,所以客户端链接时要指定域名才能顺利的建立链接。
2、客户端连接时不能再用http方式,要改成https类似下面这样。
<script>var socket = io('https://yoursite.com:2120');//.....</script>
本文摘自:
本文发布于:2023-04-07 07:07:27,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/7ef8726ecd4b80adbad7c627075690a3.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:PHPSocket.IO知识学习整理.doc
本文 PDF 下载地址:PHPSocket.IO知识学习整理.pdf
留言与评论(共有 0 条评论) |