V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
imcnan
V2EX  ›  程序员

我把项目从 Java 切到了 PHP (嗯,就是那个被 V2EX 网友刷上 Github Trends 6 月全球榜前十的 Akaxin)

  •  2
     
  •   imcnan · 2018-09-27 15:30:44 +08:00 · 9992 次点击
    这是一个创建于 2250 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前发了 Akaxin 后,被 V2EX 的网友的魔力直接推上了 Github 6 月份 Java 榜的全球前十,Github 官方 Twitter 也对此进行了报道。可短短一个月后,我们却不得不从 Java 切到了 PHP (+Golang ),推出了现在的DuckChat


    现在早就切完了,群里内测用户已有小千人。当初选择切换的原因有这么几个:

    1. 用户需要 Web 版 如果用 Java 写一个完整的 Web 版本,加上后续维护,效率真的太低。PHP 霸占业务开发语言老大位置是有实力的。而且我们的产品方向是要集成到用户已有业务里,比如与 Discuz 论坛集成,与 OA 办公集成,深度融合少不了彼此在 HTTP 层面的业务逻辑交互。切了后,用户在使用我们产品进行二次开发时,也容易的多。

    2. 性能、长链接等问题通过架构分层解决 之前选择 Java 是因为长链接。虽然 PHP 也有类似的常驻进程方案,但毕竟不是干这个的。这次把架构拆分了一下,把连接层和业务曾分开,连接层用 Golang 写掉,后面 PHP 就写简单的业务逻辑。这样一套代码同时支持了 Resp、Websocket、Http 三种协议。另外,对于用户业务系统,大家都知道关键性能主要卡在 IO 上。

    3. 拥抱已有技术资源 主要指的 HTTP 协议,业务层通过 HTTP 协议分发服务后,像很多压测、负载均衡之类的配套工具我们就都不用自己写了,节省出好多时间。

    4. 人员复用 这玩意和优化程序时的多路复用一样,就这么几个人,就不分那么多语种了,这样统一后,别人学起来很简单,互相帮忙起来也灵活的多,不像之前只能干看着。

    5. 还剩一个 Docker 问题,请大家帮忙出主意 Docker 在 Windows 上的使用太反人类了,我们需要一个能在 Windows 上完美解决环境一致性的解决方案,求介绍~~~~

    当然选择推出 DuckChat,还有产品和运营层面的考量,这里就不展开了。

    放一张截图(私有部署 | 安全可靠 | 随意定制)


    DuckChat 的产品目标不变,都是为了提供一个安全的私有聊天软件,都有单聊、群聊、小程序,能非常方便做一些群组游戏、OA 集成什么的。欢迎大家下载代码 review,现在还在 beta 期,问题还不少,轻拍啊~~~

    Github https://github.com/duckchat/gaga

    git clone https://github.com/duckchat/gaga.git
    

    最后,各位大神们,别忘了我们的 Docker 问题~~~

    61 条回复    2023-12-22 17:20:54 +08:00
    LuffyGu
        1
    LuffyGu  
       2018-09-27 15:39:14 +08:00   ❤️ 1
    docker 没用过,不过我在用 homestead,也是在 Windows 上的。
    不知道行不行,我是渣,不对别喷我啊。






    因为我开喷了你们喷不过我。开玩笑了
    imcnan
        2
    imcnan  
    OP
       2018-09-27 15:40:46 +08:00
    @LuffyGu 其实 Docker 官方自己也给的是类似方案,给用户机器上装了一个虚拟机,不过用起来很不方便。
    kulove
        3
    kulove  
       2018-09-27 15:46:43 +08:00   ❤️ 1
    没有体验地址么?
    imcnan
        4
    imcnan  
    OP
       2018-09-27 15:48:31 +08:00
    @kulove

    网页版本:gaga.akaxin.com
    Android 客户端:官网下载
    iOS:官方 QQ 群拿企业签的内测包
    xfcy
        5
    xfcy  
       2018-09-27 15:53:50 +08:00 via Android   ❤️ 1
    vagrant_(:з」∠)_也是基于虚拟机的
    luoyou1014
        6
    luoyou1014  
       2018-09-27 15:55:32 +08:00   ❤️ 2
    看了下代码,你们这是裸写 php 啊,这工作量好大。
    FakeLeung
        7
    FakeLeung  
       2018-09-27 15:57:37 +08:00   ❤️ 1
    有几个问题:
    1. 稳定性如何?
    2. 能否商用?
    3. 商用价格?
    4. 。。。。。











    等等。。。

    我这边后台是 .Net

    打扰了。。。。
    HangoX
        8
    HangoX  
       2018-09-27 16:08:07 +08:00   ❤️ 2
    window 上用 hyper-v 装 linux 虚拟机是最好的选择,我之前都是这样干的,vbox 也行。
    jimrok
        9
    jimrok  
       2018-09-27 16:12:03 +08:00   ❤️ 6
    泼点冷水给你,你这个折腾方向不对,如果是定位私有使用,一定是企业用户买单,那 java 应该是优先选择。
    imcnan
        10
    imcnan  
    OP
       2018-09-27 16:12:55 +08:00
    @HangoX 得高版本,低版本不行。高版本的话,docker 已经支持的很好了。
    tradzero
        11
    tradzero  
       2018-09-27 16:13:15 +08:00   ❤️ 2
    居然不用 composer............
    imcnan
        12
    imcnan  
    OP
       2018-09-27 16:28:55 +08:00
    @jimrok 这个不一定。
    wangxiaoaer
        13
    wangxiaoaer  
       2018-09-27 16:31:41 +08:00 via Android   ❤️ 4
    @imcnan 对,企业不一定是 Java,但一定不是 php.
    allinoneok
        14
    allinoneok  
       2018-09-27 16:33:42 +08:00   ❤️ 1
    不错 支持以下
    6IbA2bj5ip3tK49j
        15
    6IbA2bj5ip3tK49j  
       2018-09-27 16:52:09 +08:00   ❤️ 1
    感觉方向跑偏了
    定位用户是 爱折腾的计算机小白 ? 或者 个人站长 ?
    Cbdy
        16
    Cbdy  
       2018-09-27 18:30:47 +08:00 via Android   ❤️ 1
    根据我的实践,在 windows 上用 docker 最佳的方案是虚拟机,里面装个 Linux,然后再用 docker。虚拟化可以用 VirtualBox
    mmdsun
        17
    mmdsun  
       2018-09-27 19:00:54 +08:00 via Android   ❤️ 1
    请问安卓,iOS 应用是原生开发的吗?还是 rn
    66beta
        18
    66beta  
       2018-09-27 19:04:03 +08:00   ❤️ 1
    java 是政治正确,门槛低,人好招
    imcnan
        19
    imcnan  
    OP
       2018-09-27 19:37:36 +08:00
    @mmdsun 原生开发的。
    sagaxu
        20
    sagaxu  
       2018-09-27 19:44:13 +08:00 via Android   ❤️ 1
    java 和 php 开发效率差不了多少,动态类型的弊端会随着项目增大而放大
    x86
        21
    x86  
       2018-09-27 19:46:37 +08:00   ❤️ 1
    套个壳卖给老罗
    x86
        22
    x86  
       2018-09-27 19:47:25 +08:00   ❤️ 3
    套个壳卖给老罗名字都想好了 > 锤信
    STRRL
        23
    STRRL  
       2018-09-27 19:59:47 +08:00 via Android   ❤️ 2
    docker machine 或者直接配一个远程地址
    dockerd 跑在远端
    ccnccy
        24
    ccnccy  
       2018-09-27 20:11:20 +08:00 via iPhone   ❤️ 1
    老罗在流口水怎么办
    imcnan
        25
    imcnan  
    OP
       2018-09-27 23:11:27 +08:00
    @ccnccy 子弹挺好的,资金、团队都充裕,产品质量也不错。
    Symo
        26
    Symo  
       2018-09-28 00:16:09 +08:00   ❤️ 1
    java 是 v2 上的政治正确. 其实像 gitlab 或者 redmine 这种 ruby 写的, 只要打好了包装, 一样应用的很广泛. 东西好用是首要的.
    vHypnos
        27
    vHypnos  
       2018-09-28 02:56:56 +08:00
    你们都说 docker 我还有一个更大的疑问,有谁会用 windows 做服务器去起 docker 的?
    pheyer
        28
    pheyer  
       2018-09-28 08:56:18 +08:00   ❤️ 1
    @mmdsun 并没有看到有 iOS 啊
    passerbytiny
        29
    passerbytiny  
       2018-09-28 09:14:55 +08:00
    大哥,真感觉你要被自己弄疯。
    你的原因主要是:用户需要 Web 版 ,而用 Java 写 Web 版太麻烦。你的解决方案是:用 PHP 做全套,Golang 做基础设施。那如果将来用户需要 IOS 版呢、需要 Android 版呢、需要 UWP 版呢。
    为什么不换成 JavaScript 做前端、Java 做后端这种方案。另外既然你是 windows 服务器,又真闲 Java 麻烦,可以用.NET 做后端。
    imcnan
        30
    imcnan  
    OP
       2018-09-28 09:20:57 +08:00
    @pheyer iOS 一直在审核中,群里和管理员要企业包吧。
    s609926202
        31
    s609926202  
       2018-09-28 09:36:41 +08:00 via iPhone
    @imcnan 赞成,为何商用就要用 java 了?没听过这种说法~
    mxtob
        32
    mxtob  
       2018-09-28 09:47:21 +08:00
    看了下 php,发现是全源码,有点厉害了。。。
    goozp
        33
    goozp  
       2018-09-28 10:17:21 +08:00   ❤️ 1
    之前研究 windows 的 docker,天真的以为 WLS 可以完美解决,结果发现并不支持守护进程,还是要依赖于 Docker for Windows
    eeyykk
        34
    eeyykk  
       2018-09-28 10:22:29 +08:00
    请教楼主,源码里面 go 的部分在哪?没看到啊。
    xmh51
        35
    xmh51  
       2018-09-28 10:23:43 +08:00
    性能有压测过吗?什么配置下能支持多少个人在线聊天?
    xmh51
        36
    xmh51  
       2018-09-28 10:24:41 +08:00
    ipwx
        37
    ipwx  
       2018-09-28 10:25:41 +08:00
    @passerbytiny 说的很有道理。

    @imcnan 我也被你的操作惊呆了。换成 PHP,开发效率也不及 Vue.js/React.js + ES6 + Webpack 的一般吧?!后端 Java 暴露 JSON API 就完事了。嫌 Java 写起来慢,可以上 Scala 呀~ 还可以拥抱 Akka,为将来的集群拓展打下基础。
    ioth
        38
    ioth  
       2018-09-28 10:29:34 +08:00
    理由是不充分的,估计又有人来喷你是“民科”了。
    imcnan
        39
    imcnan  
    OP
       2018-09-28 10:49:42 +08:00
    @goozp windows 上的 docker 方案放弃了。我们用了 xmapp https://duckchat.akaxin.com/wiki/server/windowsInstall.md

    但是这个东西不好用,也没很好的解决一些特殊配置下的环境问题。
    另外,没法直接把 Gateway 封进去,还需要用户自己启动。
    jlkm2010
        40
    jlkm2010  
       2018-09-28 10:54:37 +08:00
    换语言的理由着实不充分,本来 java 一套撸完,现在搞成 php+golang,感觉怪怪的
    qinyusen
        41
    qinyusen  
       2018-09-28 11:01:29 +08:00
    windows 的 docker 很坑, 不同的版本的实现是不一样的,老的版本是 VMware,新版本是 linux sub system。
    whxme
        42
    whxme  
       2018-09-28 11:12:04 +08:00   ❤️ 1
    这是给黄色产业链提供技术支持啊
    imcnan
        43
    imcnan  
    OP
       2018-09-28 12:25:14 +08:00
    @whxme 大哥,我们主要用途是企业内部沟通,OA 集成啊。。。
    jimrok
        44
    jimrok  
       2018-09-28 13:48:39 +08:00   ❤️ 1
    java 的优势在于,你把接口开放给他们,他们就能给你实现 OA 机器人,PHP 不是所有企业里,外包供应商都会的。
    liukanshan
        45
    liukanshan  
       2018-09-28 13:59:23 +08:00   ❤️ 1
    没太明白 Docker 在 Windows 上的使用太反人类了 是指什么?
    Soutxx
        46
    Soutxx  
       2018-09-28 14:02:39 +08:00   ❤️ 1
    https://fiora.suisuijiang.com/ 就外观而言,我觉得这个漂亮点
    lsls931011
        47
    lsls931011  
       2018-09-28 14:07:16 +08:00   ❤️ 1
    明明是讨论 “”能在 Windows 上完美解决环境一致性的解决方案“”,你们一下子又回到语言之争了
    whwlsfb
        48
    whwlsfb  
       2018-09-28 14:29:59 +08:00   ❤️ 1
    我这边也有类似的情况,Windows 的服务器跑一些 Linux 上的服务,结果还是用 docker for windows 解决的,几个月了,目前来说还算比较稳定
    whwlsfb
        49
    whwlsfb  
       2018-09-28 14:33:50 +08:00   ❤️ 1
    说 docker for windows 一无是处还是比较浮夸,微软的 vs 上的.net core for docker 的调试&运行就完全依靠 docker for windows,说明微软还是挺重视这个的。
    imcnan
        50
    imcnan  
    OP
       2018-09-28 14:58:59 +08:00
    @whwlsfb 微软高版本支持的还行,Docker 也专门做了工作。

    但是微软低版本不行,很多用户直接在自己电脑上部署环境测试,所以问题在这。
    theswow
        51
    theswow  
       2018-09-28 15:54:12 +08:00   ❤️ 1
    我觉得我 https://github.com/gopusher 这个项目写的跟你的思路差不多 接入层用的 go 实现,提供了 api 供接入,最近打算支持 tcp 连接,目前只支持了 websocket
    路由层和业务层用 php 或则其他语言都行,目前提供了 php 的 demo
    而且我感觉我的代码很简洁

    同时我的这个接入层支持集群部署,我没有看到你的这个 gateway 怎么实现集群部署,服务上下线对 业务怎么暴露的,如果 gateway 宕机怎么办,可能有,我没有找到,还没有细看,希望多交流。

    这里也请大家帮我 review 下代码,我也能进行改进优化一下。
    imcnan
        52
    imcnan  
    OP
       2018-09-28 17:53:27 +08:00
    @sh7ning 🆙
    dilu
        53
    dilu  
       2018-09-28 18:19:36 +08:00
    homestead 是用的 vagrant,比起 docker 很重,各有优劣,如果只是想统一开发环境可以用 homestead
    classyk
        54
    classyk  
       2018-09-28 19:14:48 +08:00
    win10 pro 用 docker 还不错啊。不需要额外安装其他的虚拟机,系统自带的 hyperv 就行
    xiaolanger
        55
    xiaolanger  
       2018-09-28 19:35:17 +08:00
    @sagaxu #20 那你说一下,PHP 大概多大规模的时候,会因为动态类型影响项目?
    liuxyon
        56
    liuxyon  
       2018-09-28 19:50:22 +08:00 via Android   ❤️ 1
    这个是收费还是什么? 我自己可以用不?
    imcnan
        57
    imcnan  
    OP
       2018-09-28 19:54:28 +08:00
    @liuxyon 可以用
    lyhiving
        58
    lyhiving  
       2018-09-28 23:21:04 +08:00
    一直在找小程序的演示,结果没发现哪里可以看得到。

    docker 在 windows 上的就不建议继续消耗精力去跟进了,做高负载,稳定,入门低的才有钱途呀。兼容性上去了,性能没搞定,口碑不会好的。
    imcnan
        59
    imcnan  
    OP
       2018-09-29 09:04:07 +08:00
    @lyhiving 进官方群找管理问吧。

    有一个首页、消息聊天界面(两个位置)、可编程消息三个地方。
    yc8332
        60
    yc8332  
       2018-09-29 15:44:33 +08:00
    一致性的方案就是 docker 或者虚拟机方案(vagrant 来管理),docker 不要的话,那就是 vagrant
    woyao
        61
    woyao  
       338 天前
    可惜,项目已黄。不知道 OP 现在搞什么去了?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   990 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 19:22 · PVG 03:22 · LAX 11:22 · JFK 14:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.