这部分会作为下周去北京参加Beijing Open edX Meetup的分享之一,有兴趣的小伙伴可以到现场围观
我将分享的另一个topic是《Open edX Architecture》
由于斯坦福跳票的缘故,edx迟迟没有内置的chat功能,几年前斯坦福大学团队准备实现这个功能,也加入到feature里了,最终没有实现,今年年初整个特性移除了。
所以同学们只能自食其力了,所幸IM是个常用的功能,github里与许多很好的实现
选型时权衡的因素主要包括社区热度,项目成熟程度,技术架构,拓展性
对比了一番,我决定使用Rocket.Chat
Rocket.Chat是自托管的chat服务,采用Meteor构建,具有许多优秀的特性
主要吸引我的特性包括:
我们发现这是slack的绝佳替代。你可以通过cas/oauth2轻易地与你的系统整合,通过webhook和聊天机器人,你可以多系统做极大的拓展
所有的特性如下:

为了简化安装过程,我们采用docker(之后可以使用bitnami的发行版),首先保证你装好了docker,关于docker的使用可以参考我的docker使用小结
我们采用docker-compose编排服务来编排容器,你可以采用pip来安装docker-compose:pip install docker-compose
创建文件docker-compose.yml
|
|
运行服务:docker-compose up
应用跑在本地8818端口,如果你端口对外打开,你已经可以正常访问了
一般而言我们采用nginx来做反向代理,如果你想用webrtc功能(语音和视频),那么你需要采用https,关于https的配置,可以参考使用Let’s Encrypt(certbot)为你的网站生成免费的 SSL 证书,当然也可以参考官方文档
nginx配置形如
|
|
下边我们将以Open edX为例,将即时通信和客户系统整合到其中。当然你可以模仿着将它整合到你自己的任何系统里
Rocket.Chat与你的应用的整合主要是用户系统的整合,我们采用oauth2来整合两者。两个系统的其他功能的整合(诸如同步分组)可以通过REST apis来做,这是后话
在我们的案例中,LMS作为oauth2 prividor , 而 RocketChat作为oauth2 consumer,这部分的知识可以参考oauth2文档。如果你做过insights/edxnote和LMS的对接,你大约已经熟悉了其中的流程
这部分留待meetup上分享~/
oauth 这块坑比较多
比如user info中需要有id字段
否则会报如下错误:
|
|
https 认证的问题可以在docker通过添加环境变量: NODE_TLS_REJECT_UNAUTHORIZED=0
使用者在使用的过程中有任何问题,可以即时向课程团队/网站管理人员求助
只要你在rocketchat中开启livechat功能,之后一串js代码集成到你的页面里
|
|
将RocketChat作为client,利用它的outgoing webhook将其作为一个输入工具来用
这有点像微信公众号对微信的利用
我之前做了一个留言墙,就是这样实现的
你可以猜猜它怎么实现的
如果是早先,我会这样做:跑一个server,等待请求。如果请求合法就使用websocket post到展示页面(墙)上
为了好玩,我采用了无后端的设计,对此有兴趣的同学可以看看我的如何架空经常500的后端程序员
大体的想法就是讲RocketChat作为前端,后端采用kinto(你可以理解为firebase),当有新消息到来时,采用pusher服务,将消息pusher到消息强上,历史消息存留在kinto里,不必担心遗失
这样一来我们既没有写前端,也没有写后端,也没有写客户端,但却做到了可以在任何终端往消息墙里发消息。
这种做法是不是感觉十分unix,所有东西都是管道,我们只要关注input/output就行,组合这些积木就能得到我们想要的东西
这部分会作为下周去北京参加Beijing Open edX Meetup的分享之一,有兴趣的小伙伴可以到现场围观
我将分享的另一个topic是《Open edX Architecture》
由于斯坦福跳票的缘故,edx迟迟没有内置的chat功能,几年前斯坦福大学团队准备实现这个功能,也加入到feature里了,最终没有实现,今年年初整个特性移除了。
所以同学们只能自食其力了,所幸IM是个常用的功能,github里与许多很好的实现
选型时权衡的因素主要包括社区热度,项目成熟程度,技术架构,拓展性
对比了一番,我决定使用Rocket.Chat
Rocket.Chat是自托管的chat服务,采用Meteor构建,具有许多优秀的特性
主要吸引我的特性包括:
我们发现这是slack的绝佳替代。你可以通过cas/oauth2轻易地与你的系统整合,通过webhook和聊天机器人,你可以多系统做极大的拓展
所有的特性如下:

为了简化安装过程,我们采用docker(之后可以使用bitnami的发行版),首先保证你装好了docker,关于docker的使用可以参考我的docker使用小结
我们采用docker-compose编排服务来编排容器,你可以采用pip来安装docker-compose:pip install docker-compose
创建文件docker-compose.yml
|
|
运行服务:docker-compose up
应用跑在本地8818端口,如果你端口对外打开,你已经可以正常访问了
一般而言我们采用nginx来做反向代理,如果你想用webrtc功能(语音和视频),那么你需要采用https,关于https的配置,可以参考使用Let’s Encrypt(certbot)为你的网站生成免费的 SSL 证书,当然也可以参考官方文档
nginx配置形如
|
|
下边我们将以Open edX为例,将即时通信和客户系统整合到其中。当然你可以模仿着将它整合到你自己的任何系统里
Rocket.Chat与你的应用的整合主要是用户系统的整合,我们采用oauth2来整合两者。两个系统的其他功能的整合(诸如同步分组)可以通过REST apis来做,这是后话
在我们的案例中,LMS作为oauth2 prividor , 而 RocketChat作为oauth2 consumer,这部分的知识可以参考oauth2文档。如果你做过insights/edxnote和LMS的对接,你大约已经熟悉了其中的流程
这部分留待meetup上分享~/
oauth 这块坑比较多
比如user info中需要有id字段
否则会报如下错误:
|
|
https 认证的问题可以在docker通过添加环境变量: NODE_TLS_REJECT_UNAUTHORIZED=0
使用者在使用的过程中有任何问题,可以即时向课程团队/网站管理人员求助
只要你在rocketchat中开启livechat功能,之后一串js代码集成到你的页面里
|
|
将RocketChat作为client,利用它的outgoing webhook将其作为一个输入工具来用
这有点像微信公众号对微信的利用
我之前做了一个留言墙,就是这样实现的
你可以猜猜它怎么实现的
如果是早先,我会这样做:跑一个server,等待请求。如果请求合法就使用websocket post到展示页面(墙)上
为了好玩,我采用了无后端的设计,对此有兴趣的同学可以看看我的如何架空经常500的后端程序员
大体的想法就是讲RocketChat作为前端,后端采用kinto(你可以理解为firebase),当有新消息到来时,采用pusher服务,将消息pusher到消息强上,历史消息存留在kinto里,不必担心遗失
这样一来我们既没有写前端,也没有写后端,也没有写客户端,但却做到了可以在任何终端往消息墙里发消息。
这种做法是不是感觉十分unix,所有东西都是管道,我们只要关注input/output就行,组合这些积木就能得到我们想要的东西