css3 wshtml_swoft框架之websocket服务的简单使用

本文介绍了在CentOS 7.7环境下,使用PHP 7.2.24和Swoft 2.0.7搭建WebSocket服务的过程。通过swoft-chat.zip部署项目,启动ws:start命令开启服务。讲解了WebSocket连接处理、数据交互和Swoft的注解机制。还提到了Swoft CLI工具用于代码生成和热更新,强调理解注解机制对于Swoft框架的重要性。
摘要由CSDN通过智能技术生成

本篇博文相关环境版本如下:

OS系统:CentOS Linux release 7.7

php版本:PHP 7.2.24

swoole版本:4.4.14

swoft版本:2.0.7

swoft框架的介绍及安装

......忽略N多字,可自行移步至官网了解。

我这里已经整合了相关目录,自行下载解压上传到服务器即可。

本文所使用的的swoft整合目录文件:

swoft-chat.zip

启动swoft服务

将解压的项目上传到服务器,并进入项目根目录,执行如下命令:php ./bin/swoft ws:start  #这个就是表示启动swoft的websocket服务

php ./bin/swoft -h #查看swoft文件的更多使用帮助命令

成功启动后的示例截图如下:

上图中可以看到服务启动成功,并监听的端口是:18308

在打开的页面中输入websocket服务地址:ws://ip:18308/commun 然后点击 开启连接。注意:这里会连接到app/WebSocket/Controller/CommunController.php文件中,也就是说接下来client基于websocket协议发送数据到服务端的时候,服务端都是通过app/WebSocket/Controller/CommunController.php进行相关逻辑处理的。

示例截图如下:

为什么 ws://ip:端口/commun会让app/WebSocket/Controller/CommunController.php文件进行处理?

答:需要了解swoft框架的注解机制,了解了就知道了为啥会让这个文件进行处理了

连接上之后,接下来就可以在输入框中发送text、json等格式的数据类型给服务端了,服务端会在app/WebSocket/Controller/CommunController.php文件中的onMessage方法中接收到,然后服务端就可以在该方法里面进行相应的逻辑处理了。

示例截图如下:

为什么client端可以直接发送text、json等格式的数据类型给服务端,而服务端不需要像easyswoole那样一样,需要单独写一个消息解析类文件,进行解析?

答:swoft底层已经内置了text、json等消息解析处理,底层已经封装好了,只需要按照规范发送即可。

当client和服务端断开连接,会触发onClose方法,不过app/WebSocket/Controller/CommunController.php文件中没有该方法,有需要的可以自行添加上。

swoft框架的websocket服务简单使用示例告一段落。

swoft框架属于重量级框架,因为该框架偏向于java中的SpringBoot,所以swoft才引入了注解机制,注解是swoft框架中的重点,如果不明白注解机制,那swoft框架就学不会,可以说swoft里的一切都基于注解。easyswoole属于轻量级框架。

附一张swoft框架的websocket服务 连接的处理流程(来自官网)

尾声

1、使用swoft框架必须了解注解机制,不然没有办法基于swoft进行开发的。

2、必须了解Swoft CLI,它是基于Swoft 2.0框架构建的应用,运行时同样需要安装Swoole,用该工具可以用来创建controller、model、middleware(中间件)等。如果你是基于swoft框架进行开发,那么建议使用该工具进行生成controller等文件,如果你人工复制的其它文件,对应的注解你不一定能改正确。我提供的文件中已经安装好了该工具(即 根目录中的swoftcli.phar文件),可以在项目根目录中执行:php swoftcli.phar -h  #查看swoftcli.phar文件中的帮助命令

php swoftcli.phar gen -h #查看swoftcli.phar文件中的gen命令的使用帮助

......

3、如果你在swoft中修改了代码,那你使用reload(这里以websocket服务为例:php ./bin/swoft ws:reload)后,会发现修改的代码并没有生效,且reload之前 客户端和服务端建立的连接都失效了 但是 和客户端并没有断开连接。。reload之后用reload之前的客户端给服务端发送数据,swoft会提示该连接:session information has been lost of the SID: fd(意思就是:SID: fd的会话信息丢失了),也就是说 reload之后,不仅不会热加载你修改的代码到内存。。还会让reload之前已经和服务端连接的都失效。。关于这个问题,已经和官方确认过了,官方回复 确实是这样的(截至目前为止,这个swoft版本是这样的,不知道后续官方会不会修改下这个reload命令)。。嗯。。或者说 swoft现在的设计就是完全重启的机制(修改代码后 必须重启swoft服务才能让修改的代码生效)。。顺便说一句  easyswoole就不存在该问题。

4、由于上面说的第三点,修改代码导致reload服务后,新代码依然不起作用的原因,对开发阶段来说是很难受的,极大的不方便开发调试,官方提供的Swoft CLI命令行工具有一个serve命令用来启动swoft服务并监视文件更改以重新启动swoft服务。也就是说使用swoft在开发阶段为了方便调试,可以使用官方的Swoft CLI工具中的serve命令来启动swoft服务,这种方式启动的swoft服务的话,swoft会监视文件,如果监视到有文件更新,会自动帮我们重新启动swoft服务,这样就间接的实现代码热更新了。

Swoft CLI的serve命令使用示例如下:php swoftcli.phar serve -h  #查看swoftcli.phar工具中的serve命令的使用帮助

php swoftcli.phar serve:run -h #查看swoftcli.phar工具中的serve:run命令的使用帮助

php swoftcli.phar serve:run #使用swoftcli.phar工具来启动swoft服务,并对文件进行监视,监视到文件有更改的话,则重启swoft服务,该命令默认启动的是http和rpc服务

php swoftcli.phar serve:run -c ws:start #使用swoftcli.phar工具来启动swoft中的websocket服务,并对文件进行监视,然后xxxxxxxx你懂的。。

你是我温暖的手套冰冷的啤酒带着阳光味道的衬衫 还有日复一日的梦想    -->恋爱的犀牛【廖一梅】

声明:禁止任何非法用途使用,凡因违规使用而引起的任何法律纠纷,本站概不负责。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值