最簡單的就是socket命令嘛 .. if (sock.read() == 'close')
setTimeout 與 setInterval沒有精度可言, 它們只是把任務(wù)扔進js的事件循環(huán), 什么時候才輪到執(zhí)行可說不定,
setTimeout(()=>{xxx}, 0);
也只是會盡快給你執(zhí)行, 不能保證立即執(zhí)行
參考
"事件循環(huán)"
實際延時比設(shè)置值更久的原因
只說參數(shù)的精度的話, 毫秒
參考API文檔
你給項目做偽靜態(tài)了嗎
樓主是需要自己搭建服務(wù)器嗎,自己部署私有云?工作量怎么來說呢?沒有辦法給一個具體的定位,還是要看你的具體的需求。網(wǎng)上相關(guān)的開源代碼也是挺多的,比如webrtc開源了所有的代碼,比如tucodec免費提供了SDK。你在這些SDK的基礎(chǔ)上,完成自己服務(wù)器搭建和UI設(shè)計就可以了~
最強大的Google Analytics,你沒有在用?
Crypto-JS 就是一個集合各種加密方式的庫、使用方式還是看 API 來的快。
需要加密的一般是各種認證、以 Vue 為例的話、一般在二次封裝的 Axios 中寫上全局的加密認證。
其他需要加密的就是傳輸內(nèi)容可控的、同時需要安全性的選項之類的、但是這種比較少。
以 MD5 加密為例、MD5 加密是不可逆的、同一字符串加密后得到的結(jié)果是唯一的。所以一般是前臺傳輸?shù)臅r候?qū)⒚艽a拼上一個特定的字符、然后再加密傳輸、服務(wù)器用同樣方式加密、然后對加密后的字符串進行比對。
服務(wù)器保存密碼是加密后的、保證維護人員也是不可見的。
v-if 不可以么?
既然你給這個問題打了currying
這個標簽,我很奇怪你為什么不知道這就是一般柯里化的寫法。
log
函數(shù)接收一個tag
參數(shù),然后返回一個接收target
參數(shù)的匿名函數(shù),這個匿名函數(shù)又會返回一個接收message
的匿名函數(shù),最后這個函數(shù)使用前面接收到的三個參數(shù)來完成write
操作。
這個函數(shù)在調(diào)用的時候需要連著調(diào),像這樣:
log(aTag)(aTarget)(aMessage);
子組件的template有新增和刪除的時候會觸發(fā)父組件的更新
這里沒人嗎 要石沉大海了??
問題解決了,workerman論壇上的一個哥們提醒了我是死循環(huán)導(dǎo)致進程一直處于busy狀態(tài)。把php代碼中的死循環(huán)去掉:
// while (true) {
$connection->send(根據(jù)接收到的客戶端的$data發(fā)送要發(fā)送的消息);
// usleep(1000000); // 睡1秒 其實這個也可以去掉
// }
前端代碼中增加定時向后端發(fā)送消息的代碼,這樣后端就可以根據(jù)監(jiān)聽到的前端發(fā)送的消息往前端推送消息。worker進程只有在發(fā)送消息時才會處于busy狀態(tài),否則就會idle。之前就是因為死循環(huán)一直發(fā)送消息(busy),這樣就導(dǎo)致前端頁面每次加載都會導(dǎo)致后端創(chuàng)建一個新的進程(原來的worker進程一直沒釋放)。我之前對后端往前端推送消息的業(yè)務(wù)邏輯和技術(shù)細節(jié)沒想清楚,哎,自己給自己挖了個坑。
css貼出來看一下 ios有他特有的默認屬性的
import { ClubCodeGuard } from './../../../guards/club-code.guard';
import { EnrollMemberComponent } from './../enroll-member.component';
import { Router, ActivatedRoute } from "@angular/router";
import { EnrollMemberModule } from './../enroll-member.module';
import { MembershipService } from './../../../member/services/membership.service';
import { MemberForm } from './../models/enroll-member-form';
import { EnrollMemberPromotionsComponent } from './promotions.component';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { DebugElement,Injectable,Component, OnInit, NgModule, ViewChild } from '@angular/core';
import { ComponentFixtureAutoDetect } from '@angular/core/testing';//自動變更檢測
import { async } from '@angular/core/testing';//異步的beforeEach
import { Member } from 'app/member/models/member';
import { FormsModule } from '@angular/forms';
import { ToastrModule } from 'ngx-toastr';
import { Observable, BehaviorSubject } from 'rxjs/Rx';
import { ProformaInvoiceComponent } from 'app/member-prospect-manager/enroll-member/proforma-invoice/proforma-invoice.component';
import { ClubService } from 'app/club/services';
import { HttpModule, Http } from '@angular/http';
import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
import { HandleErrorService } from '../../../shared-services/handle-error.service';
import { AccessTypeService } from '../../../club/services/access-type.service';
import { MemberService } from '../../../member/services/member.service';
import { CurrentUserService } from '../../../user/services/current-user.service';
import { GetCurrentUserService } from '../../../user/services/get-current-user.service';
import { PromotionService } from 'app/promotions/services/promotion.service';
import { FormService } from 'app/membership/services/form.service';
import { RouterTestingModule } from "@angular/router/testing";
import { EnrollMemberMembershipTypeComponent } from 'app/member-prospect-manager/enroll-member/membership-type/membership-type.component';
import { EnrollMemberMembershipInfoComponent } from 'app/member-prospect-manager/enroll-member/membership-info/membership-info.component';
import { EnrollMemberReviewAndPayComponent } from 'app/member-prospect-manager/enroll-member/review-and-pay/review-and-pay.component';
import { EnrollMemberConfirmationComponent } from 'app/member-prospect-manager/enroll-member/confirmation/confirmation.component';
describe('when navigate to promotion selecte', () => {
let component: EnrollMemberPromotionsComponent;
let fixture: ComponentFixture<EnrollMemberPromotionsComponent>;
let de: DebugElement;
let el: HTMLElement;
let location: Location;
let router: Router;
let mockAR: any = {
params: {
subscribe: function() {
console.log('Subscribed.');
Observable.of({ id: 123 });
}
}
}
let mockRouter = {
navigate: jasmine.createSpy('navigate')
}
beforeEach(async () => {
TestBed.configureTestingModule({
providers: [
MembershipService,
ClubService,
HandleErrorService,
AccessTypeService,
MemberService,
GetCurrentUserService,
PromotionService,
CurrentUserService,
Router,
ActivatedRoute,
FormService,
{ provide: Router, useValue: mockRouter }
],
imports: [
FormsModule,
EnrollMemberModule,
HttpClientModule,
HttpModule,
ToastrModule.forRoot(),
RouterTestingModule.withRoutes([
{
path: 'tab',
component: EnrollMemberComponent,
data: {
title: 'EnrollMemberComopnent',
iconClass: 'fa fa-bullhorn'
},
canActivate: [ClubCodeGuard],
children: [
{
path: '',
redirectTo: 'membership-type',
pathMatch: 'full'
},
{
path: 'membership-type',
component: EnrollMemberMembershipTypeComponent,
data: { title: 'EnrollMemberMembershipTypeComponent', iconClass: 'fa fa-bullhorn' },
canActivate: [ClubCodeGuard]
},
{
path: 'membership-info',
component: EnrollMemberMembershipInfoComponent,
data: { title: 'EnrollMemberMembershipInfoComponent', iconClass: 'fa fa-bullhorn' },
canActivate: [ClubCodeGuard]
},
{
path: 'promotions',
component: EnrollMemberPromotionsComponent,
data: { title: 'EnrollMemberPromotionsComponent', iconClass: 'fa fa-bullhorn' },
canActivate: [ClubCodeGuard]
},
{
path: 'review-pay',
component: EnrollMemberReviewAndPayComponent,
data: { title: 'EnrollMemberReviewAndPayComponent', iconClass: 'fa fa-bullhorn' },
canActivate: [ClubCodeGuard]
},
{
path: 'confirmation',
component: EnrollMemberConfirmationComponent,
data: { title: 'EnrollMemberConfirmationComponent', iconClass: 'fa fa-bullhorn' },
canActivate: [ClubCodeGuard]
}
]
},{
path: '',
redirectTo: 'tab',
pathMatch: 'full'
}
])
]
}).compileComponents(); // compile template and css
router = TestBed.get(Router);
location = TestBed.get(Location);
fixture = TestBed.createComponent(EnrollMemberPromotionsComponent);
router.initialNavigation();
});
beforeEach(() => {
router = TestBed.get(Router);
location = TestBed.get(Location);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
少量用游標算,大量用服務(wù)器算,畢竟服務(wù)器計算能力比Python快
我看了一下源碼,確實沒有默認的配置文件,但實際上該類的父類中有#setConfigLocation(String location)
和setConfigLocations(String... locations)
方法可以設(shè)置配置文件,也就是說無參數(shù)構(gòu)造方法需要配合這些設(shè)置配置文件的方法使用,應(yīng)該無法單獨使用,這可能是Spring
提供了一種配置方式,就好像注入Bean
的時候,可以使用構(gòu)造方法注入,也可以使用setter
注入是一個道理。
你的 DOM
里就沒設(shè)置 id
屬性啊。
有滾動時間,直接偵聽容器的 scroll
事件即可。
去官網(wǎng)的API文檔找一下吧,如果沒有可能需要自己實現(xiàn),或者無法實現(xiàn):
http://www.treejs.cn/v3/api.php
個人覺得是這個配置:
node的環(huán)境變量配一下
https://github.com/emrahgundu...
github上bom頭清除的一個腳本,放在網(wǎng)站根目錄下,訪問就可以批量清除掉所有的bom頭
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓(xùn)、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務(wù)負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。