杭州网帮你
PHPSocket.IO,PHP跨平台实时通讯框架
时间:2018-04-19 23:33:27 浏览:230


de.js版本Socket.IO服务端。PHPSocket.IO底层采用websocket协议通讯,如果客户端不支持websocket协议, 则会自动采用http长轮询的方式通讯。PHPSocket.IO实现的Polling通信机制包括Adobe Flash Socket、AJAX长轮询、JSONP轮询等。具体采用哪种机制通讯对于开发者完全透明, 开发者使用的是统一的接口。
下载
PHPSocket.IO




Windows版本下载
其它应用
vmstat服务器状态监控服务
WEB消息推送框架
BrowserQuest PHP版本
摄像头视频直播
Thrift RPC 远程调用框架
Json RPC远程调用框架
聊天室框架
统计监控系统
PHP小蝌蚪实时交互游戏  hot
flappy bird 多人在线版游戏

PHPSocket.IO设计的目标是利用PHP构建能够在不同浏览器和移动设备上良好运行的实时应用,如实时分析系统、在线聊天室、在线客服系统、评论系统、WebIM等。 PHPSocket.IO与workerman的区别是,PHPSocket.IO基于workerman开发,workerman有的特性PHPSocket.IO都支持。 PHPSocket.IO最大的优势是对各种浏览器的兼容性更好。
在线示例
手册
安装

请使用composer集成phpsocket.io。

脚本中引用vendor中的autoload.php实现SocketIO相关类的加载。例如

require_once '/你的vendor路径/autoload.php';

下面服务端的代码略去了这段代码。
服务端和客户端连接

创建一个SocketIO服务端

use PHPSocketIO\SocketIO;
// 创建socket.io服务端,监听2021端口
$io = new SocketIO(2021);
// 当有客户端连接时打印一行文字
$io->on('connection', function($connection)use($io){
 echo "new connection coming\n";
});
Worker::runAll();

客户端

<script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script>
<script>
// 如果服务端不在本机,请把127.0.0.1改成服务端ip
var socket = io('http://127.0.0.1:2021');
// 当连接服务端成功时触发connect默认事件
socket.on('connect', function(){
console.log('connect success');
});
</script>

自定义事件

socket.io主要是通过事件来进行通讯交互的。

除了自带的connect,message,disconnect三个事件以外,在服务端和客户端用户可以自定义事件。

服务端和客户端都通过emit方法触发对端的事件。

例如下面的代码在服务端定义了一个chat message事件,事件参数为$msg。

use PHPSocketIO\SocketIO;
$io = new SocketIO(2021);
// 当有客户端连接时
$io->on('connection', function($connection)use($io){
 // 定义chat message事件回调函数
 $connection->on('chat message', function($msg)use($io){
   // 触发所有客户端定义的chat message from server事件
   $io->emit('chat message from server', $msg);
 });
});

客户端通过下面的方法触发服务端的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 server', $msg)触发客户端的chat message from server事件
socket.on('chat message from server', function(msg){
console.log('get message:' + msg + ' from server');
});
</script>

分组

socket.io提供分组功能,允许向某个分组发送事件,例如向某个房间广播数据。

1、加入分组(一个连接可以加入多个分组)

$connection->join('group name');

2、离开分组(连接断开时会自动从分组中离开)

$connection->leave('group name');

向客户端发送事件的各种方法

$io是SocketIO对象。$connection是客户端连接

$data可以是数字和字符串,也可以是数组。当$data是数组时,客户端会自动转换为java script对象。

同理如果客户端向服务端emit某个事件传递的是一个java script对象,在服务端接收时会自动转换为php数组。

1、向当前客户端发送事件

$connection->emit('event name', $data);

2、向所有客户端发送事件

$io->emit('event name', $data);

3、向所有客户端发送事件,但不包括当前连接。

$connection->sockets->emit('event name', $data);

4、向某个分组的所有客户端发送事件

$io->to('group name')->emit('event name', $data);

一个非常简单的聊天服务端示例

use PHPSocketIO\SocketIO;

// listen port 2021 for socket.io client
$io = new SocketIO(2021);
$io->on('connection', function($socket)use($io){
 $socket->on('chat message', function($msg)use($io){
   $io->emit('chat message', $msg);
 });
});



[上一篇] laravel事件的使用办法
[下一篇] Windows 下安装 swoole 具体步骤
Copyright 2022 © 93580.com.cn 网帮你

2022 © 版权所有 红花岗区网帮你信息技术工作室

工信部备案号:黔ICP备2024036985号-2

请使用网帮你微信扫码登录