之前发了 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 问题~~~
1
LuffyGu 2018-09-27 15:39:14 +08:00 1
docker 没用过,不过我在用 homestead,也是在 Windows 上的。
不知道行不行,我是渣,不对别喷我啊。 因为我开喷了你们喷不过我。开玩笑了 |
3
kulove 2018-09-27 15:46:43 +08:00 1
没有体验地址么?
|
4
imcnan OP |
5
xfcy 2018-09-27 15:53:50 +08:00 via Android 1
vagrant_(:з」∠)_也是基于虚拟机的
|
6
luoyou1014 2018-09-27 15:55:32 +08:00 2
看了下代码,你们这是裸写 php 啊,这工作量好大。
|
7
FakeLeung 2018-09-27 15:57:37 +08:00 1
有几个问题:
1. 稳定性如何? 2. 能否商用? 3. 商用价格? 4. 。。。。。 等等。。。 我这边后台是 .Net 打扰了。。。。 |
8
HangoX 2018-09-27 16:08:07 +08:00 2
window 上用 hyper-v 装 linux 虚拟机是最好的选择,我之前都是这样干的,vbox 也行。
|
9
jimrok 2018-09-27 16:12:03 +08:00 6
泼点冷水给你,你这个折腾方向不对,如果是定位私有使用,一定是企业用户买单,那 java 应该是优先选择。
|
11
tradzero 2018-09-27 16:13:15 +08:00 2
居然不用 composer............
|
13
wangxiaoaer 2018-09-27 16:31:41 +08:00 via Android 4
@imcnan 对,企业不一定是 Java,但一定不是 php.
|
14
allinoneok 2018-09-27 16:33:42 +08:00 1
不错 支持以下
|
15
6IbA2bj5ip3tK49j 2018-09-27 16:52:09 +08:00 1
感觉方向跑偏了
定位用户是 爱折腾的计算机小白 ? 或者 个人站长 ? |
16
Cbdy 2018-09-27 18:30:47 +08:00 via Android 1
根据我的实践,在 windows 上用 docker 最佳的方案是虚拟机,里面装个 Linux,然后再用 docker。虚拟化可以用 VirtualBox
|
17
mmdsun 2018-09-27 19:00:54 +08:00 via Android 1
请问安卓,iOS 应用是原生开发的吗?还是 rn
|
18
66beta 2018-09-27 19:04:03 +08:00 1
java 是政治正确,门槛低,人好招
|
20
sagaxu 2018-09-27 19:44:13 +08:00 via Android 1
java 和 php 开发效率差不了多少,动态类型的弊端会随着项目增大而放大
|
21
x86 2018-09-27 19:46:37 +08:00 1
套个壳卖给老罗
|
22
x86 2018-09-27 19:47:25 +08:00 3
套个壳卖给老罗名字都想好了 > 锤信
|
23
STRRL 2018-09-27 19:59:47 +08:00 via Android 2
docker machine 或者直接配一个远程地址
dockerd 跑在远端 |
24
ccnccy 2018-09-27 20:11:20 +08:00 via iPhone 1
老罗在流口水怎么办
|
26
Symo 2018-09-28 00:16:09 +08:00 1
java 是 v2 上的政治正确. 其实像 gitlab 或者 redmine 这种 ruby 写的, 只要打好了包装, 一样应用的很广泛. 东西好用是首要的.
|
27
vHypnos 2018-09-28 02:56:56 +08:00
你们都说 docker 我还有一个更大的疑问,有谁会用 windows 做服务器去起 docker 的?
|
29
passerbytiny 2018-09-28 09:14:55 +08:00
大哥,真感觉你要被自己弄疯。
你的原因主要是:用户需要 Web 版 ,而用 Java 写 Web 版太麻烦。你的解决方案是:用 PHP 做全套,Golang 做基础设施。那如果将来用户需要 IOS 版呢、需要 Android 版呢、需要 UWP 版呢。 为什么不换成 JavaScript 做前端、Java 做后端这种方案。另外既然你是 windows 服务器,又真闲 Java 麻烦,可以用.NET 做后端。 |
31
s609926202 2018-09-28 09:36:41 +08:00 via iPhone
@imcnan 赞成,为何商用就要用 java 了?没听过这种说法~
|
32
mxtob 2018-09-28 09:47:21 +08:00
看了下 php,发现是全源码,有点厉害了。。。
|
33
goozp 2018-09-28 10:17:21 +08:00 1
之前研究 windows 的 docker,天真的以为 WLS 可以完美解决,结果发现并不支持守护进程,还是要依赖于 Docker for Windows
|
34
eeyykk 2018-09-28 10:22:29 +08:00
请教楼主,源码里面 go 的部分在哪?没看到啊。
|
35
xmh51 2018-09-28 10:23:43 +08:00
性能有压测过吗?什么配置下能支持多少个人在线聊天?
|
36
xmh51 2018-09-28 10:24:41 +08:00
|
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,为将来的集群拓展打下基础。 |
38
ioth 2018-09-28 10:29:34 +08:00
理由是不充分的,估计又有人来喷你是“民科”了。
|
39
imcnan OP @goozp windows 上的 docker 方案放弃了。我们用了 xmapp https://duckchat.akaxin.com/wiki/server/windowsInstall.md
但是这个东西不好用,也没很好的解决一些特殊配置下的环境问题。 另外,没法直接把 Gateway 封进去,还需要用户自己启动。 |
40
jlkm2010 2018-09-28 10:54:37 +08:00
换语言的理由着实不充分,本来 java 一套撸完,现在搞成 php+golang,感觉怪怪的
|
41
qinyusen 2018-09-28 11:01:29 +08:00
windows 的 docker 很坑, 不同的版本的实现是不一样的,老的版本是 VMware,新版本是 linux sub system。
|
42
whxme 2018-09-28 11:12:04 +08:00 1
这是给黄色产业链提供技术支持啊
|
44
jimrok 2018-09-28 13:48:39 +08:00 1
java 的优势在于,你把接口开放给他们,他们就能给你实现 OA 机器人,PHP 不是所有企业里,外包供应商都会的。
|
45
liukanshan 2018-09-28 13:59:23 +08:00 1
没太明白 Docker 在 Windows 上的使用太反人类了 是指什么?
|
46
Soutxx 2018-09-28 14:02:39 +08:00 1
https://fiora.suisuijiang.com/ 就外观而言,我觉得这个漂亮点
|
47
lsls931011 2018-09-28 14:07:16 +08:00 1
明明是讨论 “”能在 Windows 上完美解决环境一致性的解决方案“”,你们一下子又回到语言之争了
|
48
whwlsfb 2018-09-28 14:29:59 +08:00 1
我这边也有类似的情况,Windows 的服务器跑一些 Linux 上的服务,结果还是用 docker for windows 解决的,几个月了,目前来说还算比较稳定
|
49
whwlsfb 2018-09-28 14:33:50 +08:00 1
说 docker for windows 一无是处还是比较浮夸,微软的 vs 上的.net core for docker 的调试&运行就完全依靠 docker for windows,说明微软还是挺重视这个的。
|
50
imcnan OP |
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 下代码,我也能进行改进优化一下。 |
53
dilu 2018-09-28 18:19:36 +08:00
homestead 是用的 vagrant,比起 docker 很重,各有优劣,如果只是想统一开发环境可以用 homestead
|
54
classyk 2018-09-28 19:14:48 +08:00
win10 pro 用 docker 还不错啊。不需要额外安装其他的虚拟机,系统自带的 hyperv 就行
|
55
xiaolanger 2018-09-28 19:35:17 +08:00
@sagaxu #20 那你说一下,PHP 大概多大规模的时候,会因为动态类型影响项目?
|
56
liuxyon 2018-09-28 19:50:22 +08:00 via Android 1
这个是收费还是什么? 我自己可以用不?
|
58
lyhiving 2018-09-28 23:21:04 +08:00
一直在找小程序的演示,结果没发现哪里可以看得到。
docker 在 windows 上的就不建议继续消耗精力去跟进了,做高负载,稳定,入门低的才有钱途呀。兼容性上去了,性能没搞定,口碑不会好的。 |
60
yc8332 2018-09-29 15:44:33 +08:00
一致性的方案就是 docker 或者虚拟机方案(vagrant 来管理),docker 不要的话,那就是 vagrant
|
61
woyao 343 天前
可惜,项目已黄。不知道 OP 现在搞什么去了?
|