序言

Swoft Framework 
基于 Swoole 原生协程的新时代 PHP 全栈式协程框架

Swoft 是什么?

Swoft 框架是首个基于Swoole 原生协程的新时代 PHP高性能协程全栈框架,内置协程网络服务器及常用的协程客户端,常驻内存,不依赖传统的 PHP-FPM

全异步非阻塞 IO 实现,以类似于同步客户端的写法实现异步客户端的使用,没有复杂的异步回调,没有繁琐的 yield,有类似 Go 语言的协程,灵活的注解

强大的全局依赖注入容器、完善的服务治理、灵活强大的 AOP、标准的 PSR 规范实现等

上面是官网描述, 感觉太官方, 我总结一下:

  • 常驻内存
  • 协程
  • 学习曲线平滑
  • 国内框架
  • 开箱即用的RPC

如何搭建微服务?

首先确保已经可以正确搭建Swoft

不清楚的可以查看Swoft 官方文档

鉴于每个人的开发环境都不同

这里选用官方Docker 作为开发环境

Docker下载地址>>>

拉Docker 镜像

  1. docker pull swoft/swoft

非常的简单 
 
这样就是成功了

为了方便理解

我们把swoft 复制两份

命名为swoft-rpcswoft-http

swoft-rpc只开启TCP 服务 
swoft-http只开启Http 服务

修改配置文件

把根目录的.env.example复制一份为.env

.env 文件为swoft 配置文件, 最高优先级(覆盖config 下配置)

http 用到的配置

  1. # Server
  2. PFILE=/tmp/swoft.pid
  3. PNAME=php-swoft
  4. TCPABLE=false //是否同时启动TCP 服务器,这里用不到改为false
  5. CRONABLE=false
  6. AUTO_RELOAD=true
  7. AUTO_REGISTER=false
  8. ...
  9. # HTTP
  10. HTTP_HOST=0.0.0.0 //监听的网卡
  11. HTTP_PORT=80 //监听的端口
  12. HTTP_MODE=SWOOLE_PROCESS //不用管
  13. HTTP_TYPE=SWOOLE_SOCK_TCP //不用管
  14. ...//mysql 和redis 略过
  15. # User service (demo service)
  16. USER_POOL_NAME=user //别名
  17. USER_POOL_URI=192.168.1.214:8099,192.168.1.214:8099 //负载均衡,URI填写为RPC 的地址,注意Docker和宿主之间的关系
  18. USER_POOL_MIN_ACTIVE=5 //下面都不用管
  19. USER_POOL_MAX_ACTIVE=10
  20. USER_POOL_MAX_WAIT=20
  21. USER_POOL_TIMEOUT=200
  22. USER_POOL_MAX_WAIT_TIME=3
  23. USER_POOL_MAX_IDLE_TIME=60
  24. USER_POOL_USE_PROVIDER=false
  25. USER_POOL_BALANCER=random
  26. USER_POOL_PROVIDER=consul

RPC 用到的配置

  1. # TCP
  2. TCP_HOST=0.0.0.0 //监听的网卡
  3. TCP_PORT=8099 //监听的端口
  4. TCP_MODE=SWOOLE_PROCESS //不用管
  5. TCP_TYPE=SWOOLE_SOCK_TCP //不用管
  6. TCP_PACKAGE_MAX_LENGTH=2048 //最大链接数
  7. TCP_OPEN_EOF_CHECK=false //不用管

启动Docker 容器

  1. docker run -it --rm -p 8099:8099 -v E:\WWW\swoft-rpc:/var/www/swoft swoft/swoft /bin/bash

这里用-it-v方便调试 

这样就是成功启动了

启动RPC 服务

  1. php bin/swoft rpc:start

RPC 服务只需要单独启动TCP 服务器

有的同学RPC 和TCP 的关系可能还没弄清楚

这里RPC 服务和TCP 服务器可以类比为Web 服务和HTTP 服务器

监听HTTP 来实现Web 服务 
监听TCP 来实现RPC 服务

就这样理解吧 
 
这样就是成功启动了

启动Web服务

也就是启动HTTP 服务器XD

新开一个终端来创建新容器

  1. docker run -it --rm -p 9501:80 -v E:\WWW\swoft-http:/var/www/swoft swoft/swoft /bin/bash

这里端口改成9501, 因为本地开发环境已经用了80了:b

  1. php bin/swoft server:start


因为在之前把自动开启TCP 服务器禁用了

所以显示Disabled

这样也就是成功了!

访问一下http://127.0.0.1:9501/看下有没有问题

没问题的话, 可以看下官方提供的RPC demo http://127.0.0.1:9501/rpc/call

http://blog.leanote.com/post/zcmzcm/Swoft-RPC

大功告成!

[手把手教你] 用Swoft 搭建微服务(TCP RPC)的更多相关文章

  1. netty系列之:来,手把手教你使用netty搭建一个DNS tcp服务器

    目录 简介 搭建netty服务器 DNS服务器的消息处理 DNS客户端消息请求 总结 简介 在前面的文章中,我们提到了使用netty构建tcp和udp的客户端向已经公布的DNS服务器进行域名请求服务. ...

  2. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  3. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  4. Spring Cloud和Docker搭建微服务平台

    用Spring Cloud和Docker搭建微服务平台 This blog series will introduce you to some of the foundational concepts ...

  5. 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)

    本文将以原理+实战的方式,首先对“微服务”相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程 ...

  6. 手把手教你认识并搭建Nginx

    手把手教你认识并搭建Nginx Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor ...

  7. 手把手教你用webpack3搭建react项目(开发环境和生产环境)(一)

    开发环境和生产环境整个配置源码在github上,源码地址:github-webpack-react 如果觉得有帮助,点个Star谢谢!! (一)是开发环境,(二)是生产环境. 一.首先创建packag ...

  8. 手把手教你使用 VuePress 搭建个人博客

    手把手教你使用 VuePress 搭建个人博客 有阅读障碍的同学,可以跳过第一至四节,下载我写好的工具包: git clone https://github.com/zhangyunchencc/vu ...

  9. SpringCloud学习之手把手教你用IDEA搭建入门项目(三)

    本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(二)>,不清楚的请到我的博客空间查看后再看本篇博客,上面两篇博客成功创建了一个简单的SpringCloud项目 ...

随机推荐

  1. elasticsearch 口水篇(4)java客户端 - 原生esClient

    上一篇(elasticsearch 口水篇(3)java客户端 - Jest)Jest是第三方客户端,基于REST Api进行调用(httpClient),本篇简单介绍下elasticsearch原生 ...

  2. PAT 乙级 1018 锤子剪刀布 (20) C++版

    1018. 锤子剪刀布 (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 大家应该都会玩“锤子剪刀布”的游 ...

  3. requests 请求几个接口 出现’您的账户在其它设备使用过,为保障安全,需重新登入才能在本设备使用‘

    因为接口和接口直接有个字段是关联的 在登陆请求后,后台响应了个token,下面的请求 ,请求头要带上这个token 才认为是登陆后 的操作

  4. Java-Runoob-高级教程-实例-方法:10. Java 实例 – 标签(Label)

    ylbtech-Java-Runoob-高级教程-实例-方法:10. Java 实例 – 标签(Label) 1.返回顶部 1. Java 实例 - 标签(Label)  Java 实例 Java 中 ...

  5. 学习笔记之WinSCP

    WinSCP :: Official Site :: Free SFTP and FTP client for Windows https://winscp.net/eng/index.php Win ...

  6. go语言学习--map的并发

    go提供了一种叫map的数据结构,可以翻译成映射,对应于其他语言的字典.哈希表.借助map,可以定义一个键和值,然后可以从map中获取.设置和删除这个值,尤其适合数据查找的场景.但是map的使用有一定 ...

  7. 【PHP】五分钟教你编写一个实时弹幕网站

    由于博主是个忠实的英雄联盟粉丝,所以经常观看一些明星大神的直播.而一谈到直播,肯定会看到满屏幕飘来飘去的弹幕.那么问题来了,这些视频弹幕网站如何做到实时同步的?PHP如何开发一个类似的网站? 首先要搞 ...

  8. MVC 访问静态页面 View 下面放JS

    http://blog.csdn.net/qq_17255515/article/details/53293120

  9. CRM 2016 IFrame 子页面执行 父页面函数

    CRM 中定义以下函数: windows.parent.functionname(){ //do somethion } IFrame 子页面调用 JS: windows.parent.functio ...

  10. 1449 - The user specified as a definer ('test'@'%') does not exist

    最近在做一个项目,由于服务器切换,所以需要将原有服务器的mysql数据表以及存储过程导入到另一个服务器的mysql数据库中.导入完成之后以为一切是那么的简单,却没有想到总还是出现了一些莫名其妙的问题. ...