workerman+PHP制作一个简单且简陋的web聊天室

workerman是一个高性能的PHP socket 服务器框架,workerman基于PHP多进程以及libevent事件轮询库,PHP开发者只要实现一两个接口,便可以开发出自己的网络应用,例如Rpc服务、聊天室服务器、手机游戏服务器等。

workerman的目标是让PHP开发者更容易的开发出基于socket的高性能的应用服务,而不用去了解PHP socket以及PHP多进程细节。 workerman本身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通信的模块,所以不依赖php-fpm、nginx或者apache等这些容器便可以独立运行。

首先去下载workman

和workman同级目录创建一个PHP文件,写入以下代码



use Workerman\Worker;

require_once __DIR__ . '/Workerman-master/Autoloader.php';

// 创建一个websocket的Worker监听2000接口
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// 只启动1个进程,这样方便客户端之间传输数据
$ws_worker->count = 1;

//模拟登陆,设用户id
$global_uid = 0;

// 当客户端连上来时分配uid,并保存连接,并通知所有客户端
$ws_worker->onConnect = function ($connection)
{
    global $ws_worker, $global_uid;
    // 为这个连接分配一个uid
    $connection->uid = ++$global_uid;
};

// 当客户端发送消息过来时,转发给所有人
//这里data☞用户发送过来的数据
$ws_worker->onMessage =function($connection, $data)
{
    global $ws_worker;
    //循环用户id,并发送信息
    foreach($ws_worker->connections as $conn)
    {
        //给用户发送信息
        $conn->send("用户id[{$connection->uid}] 说: $data");
    }
};

// 当客户端断开时,广播给所有客户端
$ws_worker->onClose=function($connection)
{
    global $ws_worker;
    //循环用户id,并发送信息
    foreach($ws_worker->connections as $conn)
    {
        //给用户发送信息
        $conn->send("用户id[{$connection->uid}] 断开链接");
    }
};
// 运行worker
Worker::runAll();

cmd到项目的根目录以cli的方式运行PHP文件(注,windows下需要配置php环境变量)
workerman+PHP制作一个简单且简陋的web聊天室_第1张图片

然后写一个html的页面,这里html引入了boot cdn的vue。


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Documenttitle>
head>
<body>
<div id="app">
    <ul>
        
  • {{v}}li> ul>
    <input type="submit" value="提交"> form> div> <script src="https://cdn.bootcss.com/vue/2.6.10/vue.common.dev.js">script> <script> let ws = new WebSocket("ws://127.0.0.1:2000"); let app = new Vue({ el : "#app", data : { data:[], content : '', }, created : function(){//created创建vue实例后执行的第一个方法 //message接收php workman发送过来的数据 ws.onmessage = function (ev) { //将值传入的data数组中 this.data.push(ev.data); }.bind(this); }, methods:{ onSub : function () { //发送给php workman ws.send(this.content); } } }) script> body> html>
  • 然后同时以两个不同的浏览器打开html就可以看到输入的同步信息的效果了(注,cmd窗口不要关闭)
    workerman+PHP制作一个简单且简陋的web聊天室_第2张图片
    workerman+PHP制作一个简单且简陋的web聊天室_第3张图片

    你可能感兴趣的:(workerman+PHP制作一个简单且简陋的web聊天室)