V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lincanbin
V2EX  ›  分享创造

Carbon Forum 3.3.6 发布,更新实时消息推送,全站异步刷新,历史数据统计等……

  •  3
     
  •   lincanbin ·
    lincanbin · 2015-07-21 10:29:13 +08:00 · 4276 次点击
    这是一个创建于 3418 天前的主题,其中的信息可能已经有所发展或是发生改变。

    距离上个版本发布过去了两个半月,最近比较忙,所以更新的内容不多。
    这是一个小版本更新,各位选择性升级。

    官网地址/演示地址: http://www.94cb.com/ (使用手机访问会自动跳转至手机版,或者手机直接输入 m.94cb.com )
    GitHub地址: https://github.com/lincanbin/Carbon-Forum
    3.3.6 下载地址: https://github.com/lincanbin/Carbon-Forum/archive/3.3.6.zip

    主要更新日志如下:

    实时消息推送

    考虑PHP的限制与浏览器兼容性,最终选择了Long poll来实现实时的消息推送。用户可以自行调整长连接时长,建议调成120s(PHP最大超时时间也要相应修改)。
    这个性能也相当不错,在开启Memcached的情况下,一台最低配的DO VPS大概可以承受50000人在线同时接受推送 ,换好一点的独立服务器可以更多。当然,50000人在线是足够绝大多数论坛使用的了。
    同时使用了HTML5的Notification API,即使网页在后台被最小化,也可以继续推送通知,不受影响,让论坛变得像即时通讯工具一样高效。
    img1

    全站异步加载

    即使服务器在美国,也实现了每次从客户点击到浏览器完全渲染完毕,耗时在400ms以内(网络线路正常的情况下),同时除了jQuery与我自己的global.js,其他js均以异步方式载入,非阻塞。
    并且搜索引擎友好性并没有降低,配合我之前做的Sitemap等SEO优化,保证了高收录
    img2

    论坛历史数据统计

    这是一个早就设计好的表了,这个版本把坑填上了,查看每天的新帖、总帖、新主题、总主题、新用户、总用户数量的变化。
    http://www.94cb.com/statistics (官网有快10年的数据,全部展开的话,浏览器有近20000个点要渲染,可能会比较慢)
    img3

    次要的

    • 繁体中文语言包加入(目前已支持简体中文、繁体中文、英语、波兰语)
    • 悬浮展示引用并回复的帖子的内容 img4
    • SSL支持
    • 数十处细节修改
    • Timing attack防御
    36 条回复    2015-09-11 18:34:58 +08:00
    lincanbin
        1
    lincanbin  
    OP
       2015-07-21 10:31:34 +08:00
    最近比较忙,这两个月我干的也没什么别的,大概三件事。一个,实时消息推送。第二个,全站异步刷新。第三个,历史数据统计。如果说还有一点成绩就是悬浮展示引用并回复的帖子的内容。还有数十处细节修改也是很大的。但是这些都是次要的,我主要的就是三件事情。很惭愧,就做了一点微小的工作,谢谢大家。
    lincanbin
        2
    lincanbin  
    OP
       2015-07-21 10:35:33 +08:00
    悬浮展示回复的帖子的内容这块是 oott123 做的。
    然后繁体中文语言包是 孙志贵 和 LNDDYL 做的。
    特此鸣谢。

    https://github.com/lincanbin/Carbon-Forum/graphs/contributors
    zqjilove
        3
    zqjilove  
       2015-07-21 11:08:16 +08:00
    @lincanbin , 来一个discuz转数据到Carbon Forum的功能。估计一些老站点也会考虑试用。至少我有想尝试的意愿。
    q000q000
        4
    q000q000  
       2015-07-21 11:12:25 +08:00
    手机版标题字体好大...
    lincanbin
        5
    lincanbin  
    OP
       2015-07-21 11:14:17 +08:00
    @q000q000


    这样算很大吗?我觉得差不多刚刚好吧。
    lincanbin
        6
    lincanbin  
    OP
       2015-07-21 11:19:47 +08:00
    @zqjilove Discuz里的数据能跟我那个程序里对得上的不多,DZ是板块分类,我的是像知乎那样的标签分类。
    这点比较麻烦,用户系统倒还是差不多,密码都是MD5(MD5(Password)+Salt),这点倒是可移植,但是其他的就麻烦了。
    ahu
        7
    ahu  
       2015-07-21 11:24:47 +08:00
    @lincanbin 没考虑做成相应式页面吗?我觉得不需要再专门搞一个手机版了,一套页面PC访问时显示PC版式,手机访问时显示手机版式,跟V站一样
    lincanbin
        8
    lincanbin  
    OP
       2015-07-21 11:29:21 +08:00
    @ahu V站不是响应式,他也是根据UA切换两套不同的模板,只是两套刚好长得非常像。
    另外响应式我觉得就是偷懒、不负责任的行为,个人非常讨厌响应式。

    鼠标驱动和触摸驱动的,能硬用同一套Layout?

    这搞出来就跟知乎或者Bootstrap一个样了,用起来反正我是讨厌得不行。
    zangbob
        9
    zangbob  
       2015-07-21 11:42:31 +08:00
    @lincanbin 目前这种分开的做法比较好。

    前阵儿新弄了一个站,用的响应式,各种浏览器、大小兼容要改,CSS弄到要吐。虽然google建议响应式,从长远考虑,还是PC站和mobile分开好,这点非常赞同
    abmin521
        10
    abmin521  
       2015-07-21 11:42:57 +08:00 via Android
    好牛的样子,
    lincanbin
        11
    lincanbin  
    OP
       2015-07-21 11:50:48 +08:00
    @zangbob 还有就是大部分响应式,在浏览器开启缩放的时候会跪。
    例如1600*900的屏幕,平时开150%很合理吧,大部分响应式设计还没考虑到这个点,都跪了,特别是图片多了那种幻灯片式的。
    响应式要考虑的太多,容易做烂,水平不够就不要玩响应式。
    360、腾讯、百度都有一些前端页是做响应式做到玩脱的,页面直接变形了。
    zangbob
        12
    zangbob  
       2015-07-21 11:54:07 +08:00
    @lincanbin
    捉到一只bug :P
    Chrome下,从注册或首页进入/login,填写用户名、密码后返回首页,右侧仍然显示登录窗口(而不是用户信息)。Firefox下无此问题。
    lincanbin
        13
    lincanbin  
    OP
       2015-07-21 11:58:19 +08:00
    @zangbob 蛤?我自己一直在Chrome 42下开发,没有这个问题啊。
    DearTanker
        14
    DearTanker  
       2015-07-21 12:00:46 +08:00   ❤️ 1
    论坛的文本编辑器不够简洁好用。比如不支持直接黏贴图片啥的。

    http://simditor.tower.im/

    这个虽然也不支持黏贴图片,但是起码样子看起来比较搭。
    DearTanker
        15
    DearTanker  
       2015-07-21 12:01:14 +08:00
    @zangbob 我刚才也是这个问题,再登录一次就可以了。。
    lincanbin
        16
    lincanbin  
    OP
       2015-07-21 12:02:13 +08:00
    顺便黑一下微软,虽然Win 10会有通知中心,但是Edge依旧不支持HTML5规范中的Notification API,所以Microsoft Edge浏览器中没办法后台推送消息通知,只能做到知乎那个程度的前台实时消息推送。

    在Chrome、FireFox、Opera之类的浏览器就没有这个问题。
    DearTanker
        17
    DearTanker  
       2015-07-21 12:02:35 +08:00


    貌似是卡了还是连击了,出现了2个编辑框
    lincanbin
        18
    lincanbin  
    OP
       2015-07-21 12:02:57 +08:00
    @DearTanker 编辑器是支持右键粘贴图片的,我论坛里的截图都是用QQ截图后粘贴的。
    lincanbin
        19
    lincanbin  
    OP
       2015-07-21 12:05:24 +08:00
    @DearTanker 估计是卡了吧,是每次都会还是偶然现象?
    如果是每次都会的话,报下浏览器的版本号。
    改成全异步后有好多屁股要擦,可能是我没擦干净?

    simditor逼格是挺高的,可是要IE 10+才能跑,我觉得用在开源项目中不太现实,最起码市场占有率还有20%的IE8得支持。
    虽然说不来不太好听,可是我的论坛还是保持了IE6基本兼容的。
    journey
        20
    journey  
       2015-07-21 12:06:29 +08:00
    强行膜蛤.....
    zangbob
        21
    zangbob  
       2015-07-21 12:09:34 +08:00
    @lincanbin 截图发94cb上了……
    lincanbin
        22
    lincanbin  
    OP
       2015-07-21 12:17:49 +08:00
    @DearTanker
    @zangbob



    问题坐实,是我服务器配置的问题,返回的header中竟然把首页做Cache了。
    实际上登陆已经成功了,只是因为缓存问题,看到的是之前未登录的页面。
    lincanbin
        23
    lincanbin  
    OP
       2015-07-21 13:13:34 +08:00 via Android
    @journey 哪里膜了?你真是excited。
    est
        24
    est  
       2015-07-21 13:23:45 +08:00
    还是大php创造力旺盛啊。。。
    lincanbin
        25
    lincanbin  
    OP
       2015-07-21 13:34:07 +08:00 via Android
    @est PHP用long poll实现长连接也是一个妥协的做法。
    如果不考虑浏览器兼容性和PHP虚拟主机的常规限制的话,我是打算用node.js和websocket来实现实时消息推送的。
    没准这样做就可以达到单VPS支持100000人同时在线接收推送的水平。
    k21654987
        26
    k21654987  
       2015-07-21 15:24:24 +08:00
    厉害
    banri
        27
    banri  
       2015-07-21 15:32:05 +08:00
    好顶赞,关于响应式设计的理解上,我觉得这楼里讨论的有点片面?

    目前成熟、稳定的方案也确实是通过UA区分桌面端和手机端,但是在桌面端和手机端各自的情况下,还是需要响应式设计的。响应式设计的精髓在于媒体查询,可根据媒体类型、分辨率、DPI来确保各种情况下的显示都能够达到最好的浏览效果。

    比如对于高分屏采用DPI查询增加字号和图片分辨率等,这都是属于响应式设计的一种啦 -w-
    lincanbin
        28
    lincanbin  
    OP
       2015-07-21 15:34:33 +08:00
    @banri 你说得也有道理,目前的移动端虽然是另一套独立的模板,但是也是响应式布局。
    PC端暂时没有这个打算,要考虑的东西太多了,做响应式我也没把握做好。
    DearTanker
        29
    DearTanker  
       2015-07-21 15:50:08 +08:00
    为何我没有收到上面几条的系统通知?



    @Livid
    lincanbin
        30
    lincanbin  
    OP
       2015-07-21 16:37:11 +08:00
    @DearTanker 我也经常这样,在自己主题刷着看到了新回复,却没看到通知。
    等我回复完了,刷着刷着,突然就来了消息通知,点开一看,是十几分钟前的了。
    jayzhong
        31
    jayzhong  
       2015-07-21 19:51:47 +08:00
    @lincanbin 还是用 swool 把,这个更靠谱
    lincanbin
        32
    lincanbin  
    OP
       2015-07-21 20:08:31 +08:00
    @jayzhong 问题是这个是个开源项目,肯定要兼顾兼容性,如果用swool,那么那种一年租几十块钱虚拟主机的用户到哪里编译extension用?
    如果不考虑这部分虚拟主机用户,把目标全放在有VPS/独服的用户,最佳方案也不是用swool。
    而是论坛部分由Carbon Forum完成,推送部分使用node.js例如io.js,然后用胶水粘起来。
    pein
        33
    pein  
       2015-07-22 08:53:23 +08:00
    厉害,这功能都有了。之前也写过一个长连接的东东,你这个貌似是服务器端循环的,压力比客户端轮询会大一些吧,sleep时间改大点压力会小蛮多,反正也不是聊天室那种即时通讯,呵呵。有没有想过用websocket来做呢?
    yueyoum
        34
    yueyoum  
       2015-07-22 10:26:42 +08:00
    很不错 ,

    赞!
    cobola
        35
    cobola  
       2015-07-22 11:06:15 +08:00
    写的不错 楼主考虑用meteor 来写一遍么? https://github.com/cobola/meteorbb
    mfanming
        36
    mfanming  
       2015-09-11 18:34:58 +08:00 via Android
    准备用林先生这套
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3141 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 14:36 · PVG 22:36 · LAX 06:36 · JFK 09:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.