blog icon indicating copy to clipboard operation
blog copied to clipboard

Algorithm,WebRTC,Node,Microservices,Golang,ELK,Kubernetes,Istio,JAVA,PHP,MongoDB,Ningx,OpenResty,GraphQL...

Results 8 blog issues
Sort by recently updated
recently updated
newest added

1\. 进入Home目录 ``` cd ~ ``` 2\. 添加镜像源   ubuntu 14.04 ``` echo "deb http://ubuntu.kurento.org trusty-dev kms6" | sudo tee /etc/apt/sources.list.d/kurento-dev.list ``` ubuntu 16.04 ``` echo "deb http://ubuntu.kurento.org xenial-dev kms6" |...

首先,我们需要创建一个用于与用户交互消息的桥梁(Hub)。这个思路类似于Gorilla's 的 [chat](https://github.com/gorilla/websocket/tree/master/examples/chat) 例子。 ### Client struct 创建一个 client.go 文件 ``` package main import ( "github.com/gorilla/websocket" uuid "github.com/satori/go.uuid" ) type Client struct { id string hub *Hub color string socket...

### 设计系统时,应该多思考```墨菲定律``` * 任何事都没有表面看起来那么简单 * 所有的事情都会比你预计的长 * 可能出错的事总是会出事 * 如果你担心某种情况发生,那么它就更有可能发生 ### 系统划分时,应该多思考``` 康威定律``` * 系统架构是公司组织架构的反映 * 应该按照业务闭环进行系统拆分/组织架构划分,实现闭环/高内聚/低耦合,减少沟通成本 * 如果沟通出现问题,那么就应该考虑进行系统和组织架构的调整 * 在合适的时机进行系统拆分,不要一开始就把系统/服务拆得非常细,虽然闭环,但是每个人维护的系统多,维护成本高。

一、使用 Promise/Deffered (发布与订阅模式) #### promise.js 文件 ``` var events = require('events'); var util = require('util'); // 构造Promise var Promise = function(fn) { events.EventEmitter.call(this); } // 继承 events.EventEmitter util.inherits(Promise, events.EventEmitter); //...

Daisy-chain,简单来说,是数据从一端流入,从另一端流出,看上去好像一个链表。中文名菊花链,有点邪恶的感觉。它的一个应用就是做过滤器,一张形象的图如下: ![](https://github.com/chapin666/blog/blob/master/gophereartrumpet.jpg?raw=true) 比如我们来筛下100以内的素数: ``` package main import "fmt" func xrange() chan int { ch := make(chan int) go func() { // 开启一个goroutine for i := 2; ; i++ { //...

### 快速入门 从 Spring Boot 项目名称中的 Boot 可以看出来,Spring Boot 的作用在于创建和启动新的基于 Spring 框架的项目。它的目的是帮助开发人员很容易的创建出独立运行和产品级别的基于 Spring 框架的应用。Spring Boot 会选择最适合的 Spring 子项目和第三方开源库进行整合。大部分 Spring Boot 应用只需要非常少的配置就可以快速运行起来。 **Spring Boot 包含的特性如下**: - 创建可以独立运行的 Spring 应用。 - 直接嵌入...

### 开场白 你有过写了一部分代码然后说 ”我想要这个并行执行“ 吗 ? 好吧,在node中任何东西都是并行运行的,除了你的代码。 是的没错,任何东西都是并行的,除了你的代码。为了理解它,把你的代码想像成是国王,然后 node 是它的仆从军队。 新的一天一个【仆从】叫醒国王并且问他是否需要什么而开始了,国王给了这个【仆从】一个任务列表,然后回去继续睡觉去了(汗)。这个仆从把这些任务分配给了他的同僚,然后他们开始工作。 当一个仆从完成了一个任务,他会到国王的领地外边排成一条线来汇报。国王一次让一个仆从进来,然后听取他的报告。有时候国王会在仆从出去的时候给仆从更多的任务。 生活是美好的,因为国王的仆从并行的执行他的任务,但是一次只报告一个结果,所以国王可以专注。 ### “那是异想天开,但是你能结束这个愚蠢的比喻并且用geek的方式告诉我吗?” 当然。一个简单的node程序看起来可能是这样的: ``` var fs = require('fs') , sys = require('sys'); fs.readFile('treasure-chamber-report.txt', function(report) { sys.puts("oh, look...

如果您在 NAT 环境(即任何云提供商)中安装Kurento Media Server,您需要在/etc/kurento/modules/kurento/WebRtcEndpoint.conf.ini中提供STUN服务器配置。 除此之外,您将必须打开您的安全组中的所有UDP端口,因为STUN将使用从整个0-65535范围可用的任何端口。 虽然在大多数情况下,在KMS配置文件中配置STUN服务器就足够了,但您可能需要安装[TURN](http://doc-kurento.readthedocs.io/en/stable/glossary.html#term-turn)服务器,例如[coturn](https://code.google.com/p/coturn/))。 这里说明如何安装TURN服务器: [1] 下载[安装包](https://code.google.com/p/coturn/wiki/Downloads) [2] 解压内容。 你应该获取一个带有安装说明的INSTALL文件和一个.deb包。 按照说明安装软件包。 [3] 安装软件包后,您需要修改/etc/init.d/coturn中的启动脚本。 将外部和本地IP添加: ``` EXTERNAL_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) LOCAL_IP=$(curl http://169.254.169.254/latest/meta-data/local-ipv4) ``` 通过DAEMON_ARGS变量来修改考虑在内的IPs,以及长期用户和密码凭据(在此情况下为kurento:kurento,但可能不同),realm和其他一些选项: ``` DAEMON_ARGS="-c /etc/turnserver.conf -f -o -a...