swoole / swoole-src

🚀 Coroutine-based concurrency library for PHP
https://www.swoole.com
Apache License 2.0
18.34k stars 3.16k forks source link

swoole很好但是 没有windows dll 支持 windows 开发环境,不利于推广 #300

Closed munggruel closed 8 years ago

munggruel commented 9 years ago

大部分人 一般是 开发环境 windows, 服务器运行环境 都是 linux

因为 日常生活 其实 linux 桌面并不好用 种种原因,没有 dll 没法方便的在 windows下开发,不利于推广

其实 windows 并不需要什么高性能的实现,只要能编译,能测试 就行了,没人 会把windows当成运行环境

munggruel commented 9 years ago

Windows服务器端程序感觉前景不明,Linux是王道。 Windows下可以用虚拟机安装Linux。 swoole舍弃Windows是一件明智的事情。

其实并不同意这种说法,用windows并不是因为要用windows做服务器,比如我 是兼职开发,平时 上班必须在windows下面,这样装虚拟机太麻烦而且电脑也很卡不方便,最好能有 php dll

因为 linux桌面应用程序太少了,装机率才 1.2% ,只做开发环境还好,但是 干其它事情真心不方便

matyhtf commented 9 years ago

Windows的支持也在考虑中,目前还没有排上日程。

scil commented 9 years ago

用虚拟机很方便,考虑用boot2docker或vagrant

xsen123 commented 9 years ago

装个cygwin也挺好用的

matyhtf commented 8 years ago
munggruel commented 8 years ago

我越来越觉得 需要 官方需要发布一个 cgwin 之类的 php windows 包,visual studio 编译 php 扩展 真让人崩溃

munggruel commented 8 years ago

php7 已经出来很久了 ,像 memcache xhprof 等等 常用的 php windows dll 都还没影子呢

blackpuppy commented 8 years ago

Vagrant + VirtualBox,用Linux虚拟机,不需要图形界面,512MB就可以跑得很好,不太占资源。 当然,如果能够用Docker就更好了。现在Docker for Windows也出beta了。 虚拟环境可以和Windows宿主机共享目录,这样就可以继续在Windows环境下编辑调试代码,用Windows的浏览器测试,而PHP/Apache/Nginx/MySQL等等都是跑在Linux虚拟环境下的。

van23qf commented 7 years ago

大部分开发环境肯定还是windows吧,部署生产环境才是linux,真正图形界面做开发,windows完爆linux好吗

yanyandenuonuo commented 7 years ago

时间到了2017年5月17日,dll依然没发布

keepanote commented 7 years ago

时间到了2017年6月12日,dll依然没发布

Veitor commented 7 years ago

时间到了2017年7月12日,dll依然没发布

gyf19 commented 6 years ago

时间到了2017年8月25日,dll依然没发布

makryu commented 6 years ago

时间到了2017年8月28日,dll依然没发布

kunl commented 6 years ago

时间到了2017年9月6日,dll依然没发布

taozywu commented 6 years ago

@kunl 哥们挺闲的哈。 要不你就搞一个dll来

twose commented 6 years ago

时间到了2017年10月8日,dll依然没发布

askie commented 6 years ago

时间到了2017年10月24日,dll依然没发布

seawolf1012 commented 6 years ago

时间到了2017年11月10日,dll依然没发布

adocwang commented 6 years ago

时间到了2017年12月12日,dll依然没发布

rustysun commented 6 years ago

不就是一个开发环境么? docker + VirtualBox 或者 windows 下的linux也行的

2017-12-12 14:57 GMT+08:00 adocwang notifications@github.com:

时间到了2017年12月12日,dll依然没发布

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/swoole/swoole-src/issues/300#issuecomment-350962052, or mute the thread https://github.com/notifications/unsubscribe-auth/AEptEGHtPBqd45hI9MuQixUggxnYgBTaks5s_iPMgaJpZM4FO963 .

alberthuang24 commented 6 years ago

mac os多好

ui不比windows差

twose commented 6 years ago

时间到了2017年12月29日, 大家都已经用上了Linux+Docker, 当然Windows也能跑docker, 我觉得后端开发者非常有必要了解一下docker技术, 比如swoole最新版coroutine的docker在此 https://github.com/twose/swoole-coroutine-docker https://hub.docker.com/r/twosee/swoole-coroutine/

flxxyz commented 6 years ago

时间到了2018年01月30日,dll依然没发布

开发环境继续用virtualbox共享目录

yfeier commented 6 years ago

时间到了2018年03月23日,dll依然没发布

MoNoSoo commented 6 years ago

时间到了2018年03月23日,dll依然没发布

andot commented 6 years ago

windows 下现在有 WSL 了,swoole 已经可以在 windows 下用了。

matyhtf commented 6 years ago

@andot 的回答终结了这个 issue

yanyandenuonuo commented 6 years ago

@matyhtf 并没有终结这个问题,如果说要通过wsl 在win下使用,那不用wsl用虚拟机也可以,所谓跨平台不是这种跨法。

andot commented 6 years ago

WSL 不同于虚拟机,他现在已经是 Windows 的一部分了,安装非常快,我装的 Debian 版,从 Windows 商店下载安装不到一分钟,跟 Windows 无缝对接,性能非常高,打开一个 WSL 命令行窗口的速度甚至比打开一个 PowerShell 命令行窗口还要快。而且在其中还可以直接执行 Windows 的命令,所以,它跟 Windows 命令行的体验是一样一样的。

yanyandenuonuo commented 6 years ago

@andot 那以后是不是只要支持了在linux 和mac os上运行就能对外宣称自己支持跨平台呢?

andot commented 6 years ago

@yanyandenuonuo 不是,Mac OS 下的程序不能在 Windows 下运行。Linux 下的程序能不能在 Windows 下运行也要看你的那个程序对 WSL 支持的怎么样。

kcloze commented 6 years ago

docker时代,这个需求终将是伪需求,还是把精力放到swoole怎么运用到PHP生态,目前swoole在中小型公司还只是比较激进的方案

andot commented 6 years ago

WSL 你试过之后,就知道它是个什么东西了。它绝对不是虚拟机、Cygwin 之类可比的。用过之后,你会爱上它。

yanyandenuonuo commented 6 years ago

@andot 本质上wsl就是在win上虚拟化一个linux,不存在程序对wsl支持怎么样(如果不用特殊特性的话。 如果官方不愿意支持就大方说出来,不要去用非最佳的解决方案去模糊这个问题。

andot commented 6 years ago

@yanyandenuonuo

WSL 下运行 swoole 是一个比开发 Windows 版本的 swoole 更佳的解决方案。

1、性能

同样一段 php 命令行程序,在 WSL 下比在 Windows 下效率要高出好多。

<?php

function microtime_float ()
{
    list ($usec, $sec) = explode(" ", microtime());
    return ((float) $usec + (float) $sec);
}
function echotime ($name)
{
    static $t_start = 0;
    $t_end = microtime_float();
    if ($name != 'start') {
        $time = $t_end - $t_start;
        echo ($name . ':');
        echo intval($time * 1000);
        echo "\n";
    }
    $t_start = $t_end;
}
$index = 1000;
$loop = 1000000;
$length = 10000;
$key = "abc" . $index;
$array = array();
for ($i = 0; $i < $length; $i ++) {
    $array['abc' . $i] = 'abc' . $i;
}
echotime('start');
for ($i = 0; $i < $loop; $i ++) {
    if (array_key_exists($key, $array)) {
        $a = true;
    }
}
echotime('array_key_exists');
for ($i = 0; $i < $loop; $i ++) {
    if (isset($array[$key])) {
        $a = true;
    }
}
echotime('isset');
for ($i = 0; $i < $loop; $i ++) {
    if (in_array($key, $array)) {
        $a = true;
    }
}
echotime('in_array');
for ($i = 0; $i < $loop; $i ++) {
    if (array_search($key, $array)) {
        $a = true;
    }
}
echotime('array_search');
$array2 = array_flip($array);
for ($i = 0; $i < $loop; $i ++) {
    if (isset($array2[$key])) {
        $a = true;
    }
}
echotime('flip and search');
$array2 = $array;
foreach ($array2 as $k => $v) {
    $array2[$k] = strtoupper($v);
}
echotime('foreach1');
$array2 = $array;
foreach ($array2 as &$v) {
    $v = strtoupper($v);
}
echotime('foreach2');
$array2 = $array;
$array2 = array_map('strtoupper', $array2);
echotime('array_map');

比如这一段代码,纯测 php 性能的。在 WSL 下的运行两次的结果分别为:

 andot  iMac-Win10  mnt  r  $  php test.php
array_key_exists:22
isset:16
in_array:1192
array_search:1459
flip and search:15
foreach1:0
foreach2:0
array_map:0
 andot  iMac-Win10  mnt  r  $  php test.php
array_key_exists:22
isset:15
in_array:1204
array_search:1460
flip and search:16
foreach1:1
foreach2:0
array_map:1

而在 Windows 的 Powershell 命令行里运行结果为:

 andot@IMAC-WIN10  R:  php .\test.php
array_key_exists:54
isset:41
in_array:1248
array_search:1507
flip and search:31
foreach1:5
foreach2:4
array_map:4
 andot@IMAC-WIN10  R:  php .\test.php
array_key_exists:48
isset:29
in_array:1242
array_search:1522
flip and search:29
foreach1:4
foreach2:4
array_map:4

性能差距一目了然。顺便说一下,上面 WSL 下的 php 是 7.2.3,Windows 下的 php 版本是 7.2.4。Windows 的这个版本比 WSL 下的版本还要高,但是性能却比 WSL 下的版本还要低。所以,从性能上来说,WSL 上跑 php 是比 Windows 下跑 php 更优的方案。

2、便利性

Windows 下安装扩展有两种方式,一种是下载官方编译好的 dll,一种是自己编译。

Linux 下安装扩展的方式差不多也是这样,一种是安装发行版上的安装包,比如 yum 或者 apt 方式安装,另一种是通过 pecl 命令安装,这也算是编译安装,还有下载扩展的源码,用 phpize 编译安装。

对于 swoole 扩展来说,它拥有许多的编译期选项,用户可以根据自己的需要在编译时加上这些参数,来开启这些选项。而 Windows 下编译一个扩展的难度要比 Linux 下大得多得多。不要说普通用户,就连向鸟哥这样的 PHP 内核开发者和 @matyhtf 这样的扩展开发大牛都会为配置一个 Windows 的扩展编译环境而头疼。所以,即使 @matyhtf 费心劳力的把 Windows 版本的 swoole 扩展开发出来了,你确定你能自己编译得了吗?你确定你会自己去编译安装吗?还是凑合着用 pecl 官方编译好的 Windows 版本的 dll 扩展?如果 pecl 官方编译好的 Windows 版本的 dll 扩展没有打开你需要的编译期选项,你确定你自己能搞定吗?

而如果是在 WSL 下的使用的话,安装 swoole 扩展你不管是 pecl 方式一条命令安装,还是用 phpize 从源码构建,都是非常简单的。

所以,从便利性上来说,WSL 也比 Windows 版本的更优。

3、稳定性

swoole 扩展从一开始就是在 Linux 上开发的,而且开发了这么长时间,对 Linux 的支持肯定要好过对其他系统的支持。更何况到目前为止还没有开始的 Windows 版本,即使现在开始开发 Windows 版本,你觉得从稳定性上来说,它能比 Linux 版的更好吗?要达到 Linux 版本的稳定性,需要多久呢?所以,现在即使开发了 Windows 版本,也不会有人真的把它用于生产环境,而你现在就可以直接把 swoole 在 WSL 下用于生产环境,不但可以获得跟 Linux 上一样的稳定性,还可以获得比 Windows 版本的 php 更高的执行效率。

最后,swoole 是一个命令行下运行的 php 扩展,所以它也根本不存在跟 IIS 集成什么的问题。不管它是否存在 Windows 原生版本,它都无法跟 IIS 集成,所以在有了 WSL 之后,Windows 原生版本根本就没有存在的必要。

不论你是打算在 Windows 下用来开发调试,还是打算把 Windows 作为 swoole 应用的发布环境,WSL 都是首选的最佳解决方案。

yanyandenuonuo commented 6 years ago

@andot 很感谢你的耐心回复 1、例子运行环境用同一个PHP版本更合适,因为排除了所有干扰项 2、win下常用使用扩展方式都是下载官方dll,如果说存在编译器选项,那其他提供了dll下载并且同样存在了编译选项的扩展是怎么处理的呢? 3、稳定性是说去提供了才要考虑的,并不是说因为可能存在不稳定,那我就一直不提供。并且即使一直不提供也无可厚非,大方的承认我们不提供win下运行支持,如果需要,请自行使用wsl去运行。而不是一个含糊不清的态度。

yanyandenuonuo commented 6 years ago

@matyhtf @andot 毕竟这个issue的主题是dll相关,而不是如何在win下使用swoole。如果不打算支持,官方发个声明也就可以了。

andot commented 6 years ago

1、既然你说性能对比不同版本有干扰项,那我就换成同一个版本来做测试,下面是测试截图: php WSL 下的 debian 版本仍然是完胜 Windows native 版本。

2、使用 Windows 做 php 服务器的人一般都不怎么使用高级的功能,所以一般也遇不到带有编译选项的问题。如果真的遇到了,一般也是换成 Linux 服务器重新部署,没有人会去折腾在 Windows 下自己编译扩展。除了我这种写扩展的人,没办法才会在 Windows 下安装一个编译环境。

3、不提供 Windows native 版本你们盼着提供,提供了你们肯定就会要求稳定性,然而 @matyhtf 一定会告诉你:“臣妾做不到啊!”。与其提供了之后找麻烦,还不如使用性能更优,使用更方便的 WSL 版本。而且对于 @matyhtf 来说,对 WSL 提供支持并不需要花费太多的时间,而且用户遇到任何问题都可以更方便的找到解决方案,毕竟 WSL 环境是跟 Linux 环境更接近的,所以大部分问题都跟 Linux 下遇到的问题一样,所以大部分问题都可以从官方文档、github issues 上找到解决方案。所以不论是对 swoole 开发者,还是对 swoole 用户来说,WSL 方案都是 Windows 上使用 swoole 的最优方案。

“山不到我这里来,我就到山那里去 ”,现在微软自己都愿意放下身段,把 Linux 纳入自己的 Windows 系统中,我们有什么理由还非要抱着 Windows native 版本的 php 原地不动呢。

pedrogao commented 6 years ago

时间到了2018年07月7日,在windows上使用swoole的方法有很多种,但大家仍然希望提供dll,希望能改善开发环境,更好的Debug。

firedtoad commented 6 years ago

这个团队没那么多钱 没那么多精力搞VS版本的移植 在cygwin下玩不是挺好的么

pedro notifications@github.com 于2018年7月1日周日 下午8:42写道:

时间到了2018年07月7日,在windows上使用swoole的方法有很多种,但大家仍然希望提供dll,希望能改善开发环境,更好的Debug。

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/swoole/swoole-src/issues/300#issuecomment-401604314, or mute the thread https://github.com/notifications/unsubscribe-auth/ABXoJp1avLEWviMc7tIXx7Egqiocufvmks5uCMO4gaJpZM4FO963 .

pedrogao commented 6 years ago

请问你们如何使用WSL调式swoole程序了?

suifengtec commented 5 years ago

时间到了2018年7月24日,dll依然没发布

firedtoad commented 5 years ago

up Jack Lee notifications@github.com 于2018年7月24日周二 上午11:02写道:

时间到了2018年7月24日,dll依然没发布

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/swoole/swoole-src/issues/300#issuecomment-407265210, or mute the thread https://github.com/notifications/unsubscribe-auth/ABXoJhh85S_AN-KvZG44RYwqKEPg8EL7ks5uJo5DgaJpZM4FO963 .

huangzhhui commented 5 years ago

请使用 WSL 或 Docker for Windows 来进行相关的开发调试,提供 dll 版没有意义,请结束这种时间到了XXX的行为

firedtoad commented 5 years ago

cygwin 够好用了

黄朝晖 notifications@github.com 于2018年7月25日周三 上午12:50写道:

请使用 WSL 或 Docker for Windows 来进行相关的开发调试,提供 dll 版没有意义,请结束这种时间到了XXX的行为

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/swoole/swoole-src/issues/300#issuecomment-407475249, or mute the thread https://github.com/notifications/unsubscribe-auth/ABXoJszVE2kRkulNnm5KEytc1WuOcTD1ks5uJ1A3gaJpZM4FO963 .

greenhat616 commented 5 years ago

WSL够好用了。。。 哪怕有了scoop,chocolatey... 配置PHP环境依旧是一个很麻烦的事情。直接使用WSL第一可以降低学习成本(不用再去了解Win下如何配置环境)。二是可以提高配置效率。

liuxingke commented 5 years ago

时间到了2018.9.29,终于发现Windows版swoole已经发布了:https://pan.baidu.com/s/1uTm77_cp4kn0_xMgO1DpIw

van23qf commented 5 years ago

时间到了2019年7月12日,dll依然没发布

sunnybear commented 4 years ago

any news on this? Is there any compiled (or a way to compile) Windows dll for Swoole ?