ThinkPHP与Workerman的通信,以及错误解决[更新中]

ThinkPHP与Workman的通信,以及错误解决[2020.7.16]

1.前提准备

基本错误,如Cannot assign requested address,或者是websocket.html:11 WebSocket connection to 'ws://***:2346/' failed: Error in connection establishment: net::ERR_CONNECTION_TIMED_OUT

  • 开启服务器平台安全组策略的端口,放行端口,一定要去服务器平台,比如腾讯云或者阿里云等
  • 如果安装了宝塔,一定要在“安全”里放行端口
  • 千万别关闭防火墙!仅放行端口就行!别看网上说关闭防火墙,不一定会有效果!并且服务器处于暴露状态
  • 如果使用的是服务端使用域名监听,请改成IP监听一下试试,这个可以解决大部分问题
  • 请提前配置好composer
  • 请提前确认好ThinkPHP版本 > 5.0
  • 请提前搭建好LAMP/LNMP,检查信息curl -Ss http://www.workerman.net/check.php | php,3样绿色OK缺一不可,如果有failed,请赶紧解决,参考地址,如果是宝塔,那将会很快捷,直接安装扩展,并且删除屏蔽监听函数。
  • 不要频繁断开连接重复连接客户端,容易造成进程堵塞

2.推荐参数

  • 服务端建议设置0.0.0.0,这样就不限制IP访问,不仅是内网还是公网,都是可以访问,不受限制
  • 端口推荐80-90,这是TCP推荐端口,腾讯云安全组策略不支持自定义协议,建议更改区间去80-90,85设置为佳
  • 服务端可以 尝试使用IP先进行测试,绝大多数是因为解析不到域名,先使用IP部署,如果没问题再更改域名
  • 如果安装里宝塔控制面板,请放行80-90监听端口

Demo案例(ThinkPHP配合workerman)

安装ThinkPHP

该步骤省略,随意去TP官网还是Composer,都可以

安装workerman

使用composer安装,路径切换到composer.json目录下使用composer require workerman/workerman命令

在application中创建一个服务进程

这个路径应该懂得如何创建文件吧?这个文件作用是用于创建进程和启动服务

<?php
namespace app\socket\controller;
use Workerman\Worker;
class Index
{
    public function index()
    {
        //创建一个Worker监听85端口,使用websocket协议通讯
        $ws_worker = new Worker("websocket://0.0.0.0:85");
        // 启动4个进程对外提供服务
        $ws_worker->count = 4;
        // 当收到客户端发来的数据后返回hello $data给客户端
        $ws_worker->onMessage = function($connection, $data)
        {
            // 向客户端发送hello $data
            $connection->send('hello ' . $data);
        };
        // 运行worker
        Worker::runAll();
    }
}

开启workerman服务

去到public入口路径下,创建服务,我以server.php为例

<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../application/');
//绑定到socket所在模块
define('BIND_MODULE', 'socket/index/index');	//上方的进程地址
// 加载框架引导文件
require __DIR__ . '/../thinkphp/start.php';

开启workerman服务

进入到服务器,输入命令:php server.php start

创建客户端连接

前往chrome浏览器,在控制台创建命令

<script type="text/javascript">
        // 将IP改为你服务器的IP
        ws = new WebSocket("ws://IP:85");
        ws.onopen = function() {
            console.log("连接成功");
            ws.send('tom');
            console.log("给服务端发送一个字符串:tom");
        };
        ws.onmessage = function(e) {
            console.log("收到服务端的消息:" + e.data);
        };
    </script>

=做到此部分,你的基本就顺利=

如果你还想进行更复杂的逻辑业务,请参考Workerman官方手册,另外该文章会继续更新,解决问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: thinkphp6是一个PHP框架,而workerman是一个PHP的高性能网络框架。两者可以结合使用,实现高性能的网络应用程序开发。thinkphp6提供了丰富的开发功能和便捷的开发体验,而workerman则提供了高性能的网络通信能力,可以让应用程序处理更多的并发请求。结合使用,可以让开发者更加轻松地开发出高性能的网络应用程序。 ### 回答2: ThinkPHP 6 是一个轻量级的 PHP 框架,可以帮助开发人员快速地构建功能强大的 Web 应用程序。它具有优秀的性能和灵活的架构,使其成为 PHP 开发界的一颗明珠。 Workerman 是一个基于 PHP 的高性能网络框架,它能够轻松地处理海量的并发连接。Workerman 的优势在于其非阻塞的 IO 模式,这使得它可以处理数万甚至数十万的并发连接,并且速度非常快。 ThinkPHP 6 和 Workerman 都是非常优秀的 PHP 框架,它们在某些方面是可以进行完美结合的。在实际开发,我们可以通过将 ThinkPHP 6 和 Workerman 集成在一起,来构建一个高性能、高并发的 Web 应用程序。 如果我们使用 ThinkPHP 6 和 Workerman 集成,我们可以通过 Workerman 处理大量的并发请求,并且使用 ThinkPHP 6 的 MVC 架构来管理业务逻辑。这样,我们可以使用 ThinkPHP 6 的便利性来编写复杂的业务逻辑,而不必担心网络连接的性能问题。 此外,Workerman 还提供了很多与 tcp、udp、websocket 等协议相关的支持,可以轻松地处理网络通信方面的问题。而 ThinkPHP 6 则提供了丰富的数据库操作、模板引擎和路由等功能,可以帮助我们编写复杂的 Web 应用程序。 总之,ThinkPHP 6 和 Workerman 的结合,可以帮助我们构建一个高性能、高并发的 Web 应用程序,这对于那些对性能和用户体验有较高要求的应用程序来说是一种非常不错的选择。 ### 回答3: ThinkPHP6是一个非常流行的PHP框架,许多开发者喜欢使用它来开发高质量的WEB应用程序。而Workerman是一个基于PHP的高性能网络框架,许多开发者也纷纷将其加入到自己的开发工具箱。 为了更好地探讨ThinkPHP6和Workerman的应用,我们可以先了解它们各自的特点和优势。ThinkPHP6以其简单易用、灵活性、高效性和可扩展性而闻名,并广泛运用于电子商务、社交媒体、博客、论坛和CMS等各种WEB应用场景。其团队秉承"简单、快速、创新"的开发理念,不断推出新的功能和工具,并严格遵循PSR标准,确保代码质量和可维护性。 而Workerman则注重性能和可扩展性,运用基于事件驱动的编程模型,在实现高并发、高性能通讯方面表现出色。其主要应用场景包括实时通讯、网络游戏、实时数据推送等,其高度灵活的API设计为开发者提供了非常广泛的应用空间。Workerman还支持多进程和负载均衡等功能,可以提高系统的稳定性和可用性。 使用ThinkPHP6和Workerman结合的主要目的是在实现高性能、高并发的一些WEB应用场景时提高系统的质量,并兼顾代码的可读性和可维护性。例如,可以基于ThinkPHP6和Workerman实现在线聊天功能,支持大量用户同时在线,有良好的稳定性和响应速度。此外,也可以采用Workerman的异步IO模型和多进程特性,将处理密集型任务的工作分配到不同的子进程,提高应用程序的并发性和性能表现。 综上所述,ThinkPHP6和Workerman是两个非常有用的工具,各自具有不同的特点和优势。将其结合使用可以在一些高质量的WEB应用程序发挥优势,提高应用程序的质量和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值