美文网首页
通过例子来了解 reaphp/socke-----02-chat

通过例子来了解 reaphp/socke-----02-chat

作者: 小山丘321 | 来源:发表于2020-03-28 21:55 被阅读0次
<?php

// Just start this server and connect with any number of clients to it.
// Everything a client sends will be broadcasted to all connected clients.
//
// $ php examples/02-chat-server.php 8000
// $ telnet localhost 8000
//
// You can also run a secure TLS chat server like this:
//
// $ php examples/02-chat-server.php tls://127.0.0.1:8000 examples/localhost.pem
// $ openssl s_client -connect localhost:8000
//
// You can also run a Unix domain socket (UDS) server like this:
//
// $ php examples/02-chat-server.php unix:///tmp/server.sock
// $ nc -U /tmp/server.sock

use React\EventLoop\Factory;
use React\Socket\Server;
use React\Socket\ConnectionInterface;
use React\Socket\LimitingServer;

require __DIR__ . '/../vendor/autoload.php';

$loop = Factory::create();

$server = new Server(isset($argv[1]) ? $argv[1] : 0, $loop, array(
    'tls' => array(
        'local_cert' => isset($argv[2]) ? $argv[2] : (__DIR__ . '/localhost.pem')
    )
));

$server = new LimitingServer($server, null);

$server->on('connection', function (ConnectionInterface $client) use ($server) {
    // whenever a new message comes in
    $client->on('data', function ($data) use ($client, $server) {
        // remove any non-word characters (just for the demo)
        $data = trim(preg_replace('/[^\w\d \.\,\-\!\?]/u', '', $data));

        // ignore empty messages
        if ($data === '') {
            return;
        }

        // prefix with client IP and broadcast to all connected clients
        $data = trim(parse_url($client->getRemoteAddress(), PHP_URL_HOST), '[]') . ': ' . $data . PHP_EOL;
        foreach ($server->getConnections() as $connection) {
            $connection->write($data);
        }
    });
});

$server->on('error', 'printf');

echo 'Listening on ' . $server->getAddress() . PHP_EOL;

$loop->run();

相关文章

  • 通过例子来了解 reaphp/socke-----02-chat

  • Python通过future处理并发

    future初识 通过下面代码来对future进行一个初步了解:例子1:普通通过循环的方式 例子2:通过futur...

  • MVC实现过程(二)

    通过MVC实现过程(一)了解了mvc的实现过程,这次通过上次的学习,来模仿angularjs部分形式: 例子

  • React

    通过React 入门实例教程来快速有一个了解 完成官方文档里的评论的小例子有一个完整的了解 继续看文档及相关例子?...

  • 【Solidity智能合约系列】06--结构体和Mapping

    结构体(Structs) Solidity提供了一种方式struct来定义自定义类型。通过下面的例子来了解一下: ...

  • Golang的Tag语法

    我们可以通过Tag来增强结构体的定义,Tag会带上一些meta信息,在本文中我们将通过几个例子来深入了解Tag的用...

  • 重学 JS 系列:聊聊 new 操作符

    new 的作用 我们先来通过两个例子来了解 new 的作用 从上面一个例子中我们可以得出这些结论: new 通过构...

  • methods

    通过几个例子来进行了解如何使用方法 在这个例子中 我们创建了一个name 和一个方法handleClick通过点击...

  • Python Learning-面向对象编程-类 一

    通过一个例子来了解类 下面是本例的解读: 代码: 使用关键字class来创建类,class后面的Store表示类名...

  • synchronized 怎么使用

    文章目录 前言 通过一系列的例子,了解synchronized 使用 总结 前言 上一篇了解了synchroniz...

网友评论

      本文标题:通过例子来了解 reaphp/socke-----02-chat

      本文链接:https://www.haomeiwen.com/subject/pvkeuhtx.html