广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >浅谈Swoole并发编程的魅力
  • 898
分享到

浅谈Swoole并发编程的魅力

2024-04-02 19:04:59 898人浏览 泡泡鱼
摘要

目录场景介绍并发编程编码实现并发难题数据同步问题思维转变场景介绍 假设我们要做一个石头剪刀布的WEB游戏,3个玩家同时提交竞猜后显示胜者。在传统串行化Web编程中,我们一般思路是这样

场景介绍

假设我们要做一个石头剪刀布的WEB游戏,3个玩家同时提交竞猜后显示胜者。在传统串行化Web编程中,我们一般思路是这样:

设置fORM表单,用户提交竞猜后保存到Mysql/Redis存储
添加一个查看结果按钮,如果未全部完成,显示正在等待其他人提交。当3个人全部提交时,查询存储,并显示最终结果

并发编程

这个场景就可以使用Swoole实现并发编程,无需依赖mysql/Redis存储,在内存中可以完成竞猜。

当有用户提交竞猜时,hold住请求,不返回结果,用户进入等待状态。当前请求和连接保持在内存中

当3个人全部提交时,从内存中取出相关请求的内容,计算并遍历向所有请求发送响应

编码实现


<?PHP
$server = new Swoole\Http\Server('127.0.0.1', 9501, SWOOLE_BASE);
$result = [];
$server->on('request', function ($req, $resp) use(&$result) {
$resp->header('Content-Type', 'text/html; charset=UTF-8');
if ($req->server['request_method'] == 'GET') {
$resp->end('
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<form method="post" action="">
<input type="radio" value="石头" name="result">石头
<input type="radio" value="剪刀" name="result">剪刀
<input type="radio" value="布" name="result">布
<button type="submit">提交</button>
</form>
');
} else {
$result[$req->get['name']] = [$req, $resp];
if (count( $result) == 3) {
$out = '';
foreach($result as $arr) {
[$_req, $_resp] = $arr;
$out .= $_req->get['name'] ." : ". $_req->post['result']."<br />\n";
}
foreach($result as $arr) {
[$_req, $_resp] = $arr;
$_resp->end($out);
}
$result = [];
}
}
});
$server->start();

执行程序

php game.php

打开3个Chrome的Tab页。并且URL中传入name分别为A、B、C代表3个用户。

在第一个、第二个提交结果时,并未返回任何结果,Chrome正在转圈等待服务器返回结果。第三个表单提交时3个Tab页同时返回结果。

并发难题

并发编程比串行编程更强大,也更复杂。并发编程会遇到之前串行编程所没有的新问题,如:

数据同步问题

上下文管理问题

时序问题

这需要开发者具备更严谨的工程思维能力,也需要开发者具备更深厚的编程功底。

思维转变

Swoole其实颠覆了以往PHP的编程模式,使得程序员的视野不再局限于一次请求的处理,不再局限于对于数据库CURD操作、接口调用。配合使用Swoole4提供的协程编程能力,就可以在内存空间内实现各种复杂的交互。

新的编程模式,可以让PHPer轻松地去实现网络游戏、服务器系统、智能家居、物联网项目

以上就是浅谈Swoole并发编程的魅力的详细内容,更多关于Swoole并发编程的魅力的资料请关注编程网其它相关文章!

--结束END--

本文标题: 浅谈Swoole并发编程的魅力

本文链接: https://www.lsjlt.com/news/126978.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅谈Swoole并发编程的魅力
    目录场景介绍并发编程编码实现并发难题数据同步问题思维转变场景介绍 假设我们要做一个石头剪刀布的Web游戏,3个玩家同时提交竞猜后显示胜者。在传统串行化Web编程中,我们一般思路是这样...
    99+
    2022-11-12
  • Java并发编程之浅谈ReentrantLock
    目录一、首先看图二、lock()跟踪源码2.1 非公平锁实现2.1.1 tryAcquire(arg)2.1.2 acquireQueued(addWaiter(Node.EXCLU...
    99+
    2022-11-12
  • 浅谈一下Java的线程并发
    谈到并发,必会涉及操作系统中的线程概念,线程是CPU分配的最小单位,windows系统是抢占式的,linux是轮询式的,都需要获取CPU资源。并行:同一时刻,两个线程都在执行。并发:...
    99+
    2022-11-13
  • 怎么浅谈Java并发编程中的Java内存模型
    这篇文章的内容主要围绕怎么浅谈Java并发编程中的Java内存模型进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!物理计算机并发问题在介绍Java内存...
    99+
    2023-06-17
  • Java 异步编程:如何提升程序的并发能力?
    在当今的软件开发中,提高程序的并发能力是至关重要的。随着业务量的增加,单线程处理任务的能力将会受到限制,这时候就需要采用异步编程的方式来提高程序的并发能力。 Java 作为一种面向对象的编程语言,也提供了一些异步编程的机制。在本文中,我们...
    99+
    2023-09-29
    异步编程 打包 load
  • Python 面试中如何评估候选人的并发编程能力?
    在现代软件开发中,许多应用程序都需要处理大量的并发请求,而并发编程能力已经成为了程序员的必备技能之一。在 Python 面试中,如何评估候选人的并发编程能力呢?本文将为大家提供一些思路和实践方法。 一、理论基础 在评估候选人的并发编程能力...
    99+
    2023-11-09
    面试 并发 windows
  • 面试官必读:如何考察候选人在 Python 并发编程和 Windows 环境下的应用能力?
    在当今互联网时代,Python 作为一种易学易用的编程语言,已经被广泛应用于各种领域。Python 并发编程和 Windows 环境下的应用能力是 Python 开发人员必须掌握的技能之一,因此,在招聘 Python 开发人员时,考察候选...
    99+
    2023-11-09
    面试 并发 windows
  • ASP异步编程接口如何帮助自然语言处理应用实现更高的并发处理能力?
    自然语言处理(Natural Language Processing,简称NLP)应用在当今信息时代中被广泛应用,其中最常见的应用包括智能客服、智能翻译、智能语音识别等。但是,NLP应用需要处理大量的文本数据,而处理文本数据的过程往往会占...
    99+
    2023-08-09
    异步编程 接口 自然语言处理
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作