webRTC【二】单机实现方案无信令版本

上一篇介绍可能是整体的流程,可能表述的太简单,不过实现的时候还是需要一步一步的来实现,技术点有两部分 [M] = method [E] = event

  • navigator.mediaDevices.getUserMedia
  • RTCPeerConnection
    • [M] addStream
    • [M] setLocalDescription
    • [M] setRemoteDescription
    • [M] createOffer
    • [M] createAnswer
    • [E] icecandidate
    • [M|E] addstream

更多

nginx如何设置用户访问限制

明天3月8号妇女节了,给项目组里面的唯一美女keke做了个相册,提前祝美女们节日快乐了,由于时间紧迫也没做用户权限系统,索性就用nginx配置了访问限制。
其实主要的是两行当面。

auth_basic_user_file /usr/local/nginx/conf/passwd;
auth_basic 'please input user code'

其中 passwd
是用

htpasswd -c ./passwd  username 

输入两次密码就生成了

更多

【小程序】最强知识王者

一年又要结束了,最近大家手上的工作也没那么紧急了,自己静下来想搞点东西,正好前段时间看见支付宝里的一个金融知识类对战的小程序,
就像搞一个类似的小程序,废话补多少开干

首先起名

第一步就尴尬了,好多名字都被使用了,最强王者,知识王者,王者pk,知识王者pk, 最后无奈用了 “最强知识王者”

产品构思

开弓没有回头箭,第一步那么辛苦的选了个名字,O(∩_∩)O哈哈,接下来更要鼓起劲,
因为以前做过小程序了(宝宝快乐学),这次在技术方面没有那么多的考虑,主要在想法的方面花的时间比较多

整理了几项问题:

  • 题目的收集
    花了半天时间写了个脚本爬了1MB的百科题目,简单整理了下,最后大概有3k多道。
  • logo的设计
    从网上搜了几个皇冠,自己ps拼凑拼凑出来个 logo
  • 要有特色
    这个可想的真不少,当时考虑的要做一些道具,增加趣味性,以前看见过这样类似的游戏 (12~13年左右),捕鱼在线对战,相互给对方释放减益道具 影响对方的捕鱼积分。
    所以自己想搞一搞,最后这个想法 由于小程序的功能限制比较多,被搁舍去了

技术难点

可能唯一的点就是长连接方面,房间的人数限制,未授权限制,最后一定要正常进入房间,不过思路清晰,状态维护好的话就迎刃而解了。

webscoket 服务使用自己搭建的 http://link.ibeeger.com nginx 做到了https的代理下

怕看的时候无聊 自己添加了音乐

文章来源: 【小程序】最强知识王者

已知圆心半径画等边三角形

基础公式:r * cos(angle) = x ; r * sin(angle) = y;

核心方法参考扩展了下,根据角度话等多边形

function Circle(x, y, r) {
  this.mPointX = x;
  this.mPointY = y;
  this.mRadius = r;
}

function Point(x, y) {
  this.x = x || 0;
  this.y = y || 0;
}

Circle.prototype.getPointOnCircle = function (angle) {
  let mPointX = this.mPointX;
  let mRadius = this.mRadius;
  let mPointY = this.mPointY;
  let lth = 360/angle;
  let startangle = parseInt(Math.random() * angle);
  let list = []
  for(let i = 0; i<lth; i++) {
    list.push(new Point(mPointX + (mRadius * Math.cos((angle * i + startangle)  * Math.PI / 180)),
    mPointY + (mRadius * Math.sin((angle * i + startangle)  * Math.PI / 180))))
  }
  return list
}


var circle = new Circle(10,20,50);
var p = circle.getPointOnCircle(process.argv[2] || 10);
console.log(p)

更多

react按需加载配置

今天就抽时间看了下
react 按需加载配置

import React,{lazy, Suspense} from 'react'
import ReactDom from 'react-dom'
import { HashRouter,  Route, Switch } from 'react-router-dom'

const Room = lazy(() => import("./pages/room"));
const Play = lazy(() => import("./pages/replay"));

function WaitingComponent(Component) {
  return props => (
    <Suspense fallback={<div>Loading...</div>}>
      <Component {...props} />
    </Suspense>
  );
}

ReactDom.render((
  <HashRouter>
    <Switch>
      <Route exact path="/" component={Index} />>
      <Route exact path="/room/:roomid/:userid" component={WaitingComponent(Room)} />
      <Route exact path="/replay/:roomid/:roomToken" component={WaitingComponent(Play)} />
      <Route component={Error} />
    </Switch>
  </HashRouter>
), document.getElementById("app-root"));
文章来源: react按需加载配置