1、Workerman是一款纯PHP开发的开源高性能的PHP socket服务器框架

被广泛的用于手机app、移动通讯、微信小程序、手游服务端、网络游戏、php聊天室、硬件通讯、智能家居、车联网、物联网等领域的开发。支持TCP长连接,支持Websocket、HTTP等协议,支持自定义协议。拥有异步Mysql、异步Redis、异步Http、异步消息队列等众多高性能组件。

2、在8 64位下使用workerman

官网

  • http://www.workerman.net

系统环境检测

  • curl -Ss http://www.workerman.net/check.php | php
  • 上面脚本如果全部显示ok,则代表满足WorkerMan要求,直接到官网下载例子即可运行。
  • 如果不是全部ok,则参考官方文档安装缺失的扩展即可。

使用WebSocket协议对外提供服务

  • 创建php文件
  • <?php
  • use Workerman\Worker;
  • require_once __DIR__.’Workerman/Autoloader.php’;
  • // 这里使用的是websocket协议
  • $ws_worker = nes Worker(“websocket://0.0.0.0:2000”);
  • // 启动进程对外服务,可自定义数量
  • $ws_worker->count = 1;
  • //接收客户端发来的数据,业务处理后返回相应信息给客户端
  • $ws_worker->onMessage = function($connection,$data){
  • // $connection当前客户端的实例,$data是接收到的信息
  • // 向客户端发送Hello World
  • $connection->send(‘Hello World’);
  • }
  • // 运行全部的worker
  • Worker::runAll();

命令行运行

  • Debug模式:php ws_test.php start // 窗口关闭后就退出脚本
  • Doman模式:php ws_test.php -d //守护进程,窗口关闭后不会退出

基本命令

  • 启动:start  停止:stop  状态:status

测试连接

  • // 使用支持ws连接的浏览器,打开调试控制台,在concole输入代码进行调试
  • // 假设服务端ip为127.0.0.1
  • ws = new WebSocket(‘ws://ip:2000’);
  • ws.onopen = function(){
  • alert(‘连接成功’);
  • ws.send(‘cjw’);
  • alert(‘给服务端发送一个字符串:cjw’);
  • };
  • ws.onmessage = function(e){
  • alert(‘收到服务端的消息:’ + e.data);
  • };

小游戏数据互传实验

  • 服务端如何将客户端联系在一起,并将消息发送给特定的客户端?
    • 当客户端第一次进入时,给它分配一个唯一标识
    • 在主进程建立客户端连接关系和映射,可解决消息互传问题
  • 关键代码:
  • // 主进程数必须设置为1,因为多个进程的话,客户端就可能不在同一个共有区域
  • $ws_worker->count = 1;
  • // 新增一个属性,用来保存uid到connection的映射(uid是用户id或客户端唯一标识)
  • $ws_worker->uidConnection = array();
  • // 给客户端一个唯一标识,这里用23位的随机数做例子
  • $connection->uid = uniqid(true)
  • // 建立映射
  • $ws_worker->uidConnections[$connection->uid] = $connection;
  • // 向所有用户推送数据
  • foreach($ws_worker->uidConnections as $connection){
  • $connection->send($message);
  • }
  • // 向特定uid推送数据
  • $connection = $ws_worker->uidConnections[$uid];
  • $connection->send($message);

欢迎留言