使用swoole编写简单的echo服务器

server.php代码如下:

<?php
class EchoServer {
    protected $serv = null;

    public function __construct() {
        $this->serv = new swoole_server(‘0.0.0.0‘, 8888);
        //配置参数
        $this->serv->set(array(
            ‘worker_num‘ => 4,
            ‘daemonize‘ => 0,
        ));
        //注册回调函数
        $this->serv->on(‘start‘, array($this, ‘start‘));
        $this->serv->on(‘connect‘, array($this, ‘connect‘));
        $this->serv->on(‘receive‘, array($this, ‘receive‘));
        $this->serv->on(‘close‘, array($this, ‘close‘));
        //启动服务
        $this->serv->start();
    }

    public function start($serv) {
        echo "start \n";
    }

    //有客户端连接时
    public function connect($serv, $fd) {
        echo "connect \n";
        $serv->send($fd, "hello \n");
    }

    public function close($serv, $fd) {
        echo "close \n";
    }

    public function receive($serv, $fd, $from_id, $data) {
        echo "get message {$fd} : {$data} \n";
        //向客户端发送信息
        $serv->send($fd, $data . "\n");
    }
}

$serv = new EchoServer();

client.php代码如下:

<?php
class EchoClient {
    protected $client = null;

    public function __construct() {
        //注意这里需设置为异步,不然下面无法设置事件回调函数
        $this->client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);

        $this->client->on(‘connect‘, array($this, ‘connect‘));
        $this->client->on(‘receive‘, array($this, ‘receive‘));
        $this->client->on(‘close‘, array($this, ‘close‘));
        $this->client->on(‘error‘, array($this, ‘error‘));
        //连接服务端
        $this->client->connect(‘0.0.0.0‘, 8888);
    }

    public function connect($client) {
        echo "connect \n";
    }

    public function receive($client, $data) {
        echo "server send: {$data}";

        //向标准输出写入数据
        fwrite(STDOUT, "请输入消息:");
        //获取标准输入数据
        $msg = trim(fgets(STDIN));
        //向服务端发送数据
        $client->send($msg);
    }

    public function close($client) {
        echo "close \n";
    }

    public function error($client) {
        echo "error \n";
    }
}

$cli = new EchoClient();

然后分别运行这两个脚本

> /data/php56/bin/php server.php
> /data/php56/bin/php client.php  

运行结果如下:

时间: 2024-10-21 07:56:41

使用swoole编写简单的echo服务器的相关文章

Java网络学习笔记1:用(Server)Socket编写简单的客户/服务器程序

首先需清楚Socket类提供了getInputStream()方法和getOutputStream()方法,分别返回输入流InputStream对象和输出流OutputStream对象.程序只需向数据流写数据,就能向对方发送数据:只需从输入流读数据,就能接收来自对方的数据. 创建服务器程序DemoServer01 public class DemoServer01 { /**  * @author 牧羊的伯格女皇  11/12  * @param args  * 创建服务端与客户端之间的相互通信

go编写简单的web服务器

package main import ( "fmt" "log" "net/http" "strings" ) //http://localhost:9090/?url_long=111&url_long=222 func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数,默认是不会解析的 fmt.Println(r

[UNIX网络编程] sun rpc实现的简单echo服务器

RPC的全称是Remote Procedure Call,它能够在本地以函数调用的形式来实现网络操作,让程序员集中关注于业务逻辑,不用关心底层的数据通信. 这里不会详细讲解RPC的原理,而是用一个简单的echo服务器的例子来说明如何使用RPC. 最早实现的RPC是sun rpc,现在它已经移植到了大多数操作系统. 使用RPC,程序员只需要关注客户与服务器之间数据传送的格式以及如何远程过程的定位,客户端如何调用本地函数以调用远程函数,服务器远程过程的实现. 1 客户端与服务器之间数据的交互 客户与

[python网络编程]利用socket编写简单的服务器

利用socket编写简单的服务器 步骤解析 建立socket对象 这一步跟我们上次使用socket做客户端是一样的,都需要有一个socket连接 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 设置socket选项(setsockopt) 选项介绍setsockopt(set socket option),参数设置格式:setsockopt(level,optname,value) 各选项的关系:1.level:level的设定决定了op

如何使用C++实现简单的TCP服务器的编写

简单的TCP服务器实现 #include <stdio.h> #include <ctype.h> #include <sys/socket.h> #include <arpa/inet.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <errno.h> #include <pthread.h> #def

漫谈:一个简单的单线程基于epoll的echo服务器(附简单的性能测试)

为什么使用epoll 这个是老生常谈了,四个字,多路复用,要不单线程只能停等排队.另外select和poll不如epoll强大好用. 程序结构漫谈 代码很简陋,基本属于玩具.但是还是随便谈谈. 在单线程模型下使用epoll,只能使用一个epoll的instance同时监听socket描述符和connection描述符.当socket描述符就位时,就调用accept处理三次握手建立连接,同时将调用epoll_ctl将这个connfd加入epoll的事件监听表中.如果connfd就位,就调用recv

Grizzly开发Echo服务器实战

Grizzly开发Echo服务器实战 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 用Java编写可伸缩的服务器应用是有难度的,用Java NIO开发.线程管理.为成千上万的用户做服务器扩展,这些都是难点.Grizzly NIO框架的设计目标就是帮助开发者很好地利用Java NIO API,编写出高可扩展性的.功能强大的服务器,并提高了扩展的框架组件:Web Framework(HTTP/S).WebSocket.Comet等. Grizzly 2

《Python入门》第一个Python Web程序——简单的Web服务器

上一篇讲了<Python入门>Windows 7下Python Web开发环境搭建笔记,接下来讲一下Python语言Web服务的具体实现:第一个Python Web程序--简单的Web服务器. 与其它Web后端语言不同,Python语言需要自己编写Web服务器. 如果你使用一些现有的框架的话,可以省略这一步: 如果你使用Python CGI编程的话,也可以省略这一步: 用Python建立最简单的web服务器 利用Python自带的包可以建立简单的web服务器.在DOS里cd到准备做服务器根目录

《Go语言入门》第一个Go语言Web程序——简单的Web服务器

概述 上一篇讲了 <Go语言入门>第一个Go语言程序--HelloWorld,接下来讲一下Go语言Web开发入门必修课:第一个Go语言Web程序--简单的Web服务器. 与其它Web后端语言不同,Go语言需要自己编写Web服务器. 有关本地环境的搭建与基础学习,请参考: <Go语言入门>如何在Windows下安装Go语言编程环境 Go语言Web应用:IBM的云平台Bluemix使用初体验--创建Go语言 Web 应用程序,添加并使用语言翻译服务 Web服务器代码 Google在ht