swow / swow

Coroutine-based cross-platform concurrent I/O engine.
Apache License 2.0
1.2k stars 111 forks source link

[bug] channel pop execution does not respond #113

Closed cexll closed 2 years ago

cexll commented 2 years ago

Describe the bug / 问题描述

在向channel->push后使用pop取出数据程序疑似无响应 To Reproduce / 如何复现

image

  1. ws收到信息后将message push到channel image

  2. 然后在service取出数据走到pop后程序疑似无响应了 拿不到数据 也不执行之后的代码 同时其他无异常例如 http 继续发送信息无异常

Expected behavior / 正确的行为

正确取出pop数据发送给ws客户端 image

Outputs / 程序输出

image

Runtime Environment / 运行环境

OS:

Linux LAPTOP-9EPBATCU 4.4.0-22000-Microsoft #1-Microsoft Fri Jun 04 16:28:00 PST 2021 x86_64 x86_64 x86_64 GNU/Linux
fill here with your OS version / 在这填入你的OS信息
NAME="Ubuntu"
VERSION="20.04.2 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.2 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

PHP:

PHP 8.0.15 (cli) (built: Feb 11 2022 16:08:55) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.15, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.15, Copyright (c), by Zend Technologies
    with Yasd v0.3.9-alpha, Our Copyright, by codinghuang

Swow: <!-- php --ri swow -->


Swow

Status => enabled
Author => Swow Team
Link => https://github.com/swow/swow
Contact => Twosee <twosee@php.net>
Version => 0.1.0-487abd24 ( NTS )
Built => Apr  3 2022 11:44:04
Context => boost-context
Scheduler => libuv-event
With => OpenSSL 1.1.1f  31 Mar 2020, cURL 7.68.0

Additional context / 补充说明

cexll commented 2 years ago

提供可运行demo https://github.com/cexll/mixphp-swow-demo

twose commented 2 years ago

@cexll Framework这个文件夹是空的,跑不了

cexll commented 2 years ago

可以不用他

twose commented 2 years ago

还没有仔细看 说一个可能的问题 Swow的运行模式类似于Golang,如果在主协程的末尾没有进行wait,主协程会退出并kill所有子协程,所以需要确认下你是否在主协程的末尾wait了,可以用Channel,或者Swow也提供了Sync\waitAll()方法,当然更推荐用Channel,可以通过对Channel的操作来决定何时退出进程。

cexll commented 2 years ago

好 明天我在研究研究 并提供最小可运行代码

cexll commented 2 years ago

然后我用了swow/channel

https://github.com/cexll/mix-framework 这是framework的代码 实际上是不需要的在composer删掉就可以 image

cexll commented 2 years ago

image 这里使用了waitAll

cexll commented 2 years ago

明天我在确定一下 辛苦了大佬

cexll commented 2 years ago

demo已更新 主要运行文件在 bin/swow.php 处理逻辑在 src/Service/Session.php

https://github.com/cexll/mixphp-swow-demo

twose commented 2 years ago

...晕倒,你这个Session都没有start,都没有启动那个消费的协程,我改了一下是正常的

image
twose commented 2 years ago

BTW,在启动文件里加一行\Swow\Debug\showExecutedSourceLines(true),就可以看到你程序的整个运行流程了

image

image

cexll commented 2 years ago

😲 可能后面改的时候改掉了

cexll commented 2 years ago

😲 可能后面改的时候改掉了

我在看一下 谢谢大佬

cexll commented 2 years ago

问题已解决 感谢大佬❤