加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

这个实验说明了可以用golang实现一个代替nginx+php-fpm的应用服务器

发布时间:2016-10-29 22:05:49 所属栏目:PHP教程 来源:segmentfault
导读:副标题#e# #p#副标题#e#而且可以通过提供golang函数给php挪用的方法实现I/O的异步化,现实的收益取决于后端的http处事的耽误,err:=theEngine.NewContext() iferr!=nil{ fmt.Println(err) } context1.Output=os.Stdout iferr!=nil{ fmt.Println(err) } fmt.
而且可以通过提供golang函数给php挪用的方法实现I/O的异步化,现实的收益取决于后端的http处事的耽误,err:=theEngine.NewContext() iferr!=nil{ fmt.Println(err) } context1.Output=os.Stdout iferr!=nil{ fmt.Println(err) } fmt.Println(1enter) _,可以把execute酿成对异步execute+callback的包装,把原本的php上下文规复,得到的是php的(EG/SG/PG)这三个全局context(拜见:http://www.cnblogs.com/chance...)。

err:=theEngine.NewContext() iferr!=nil{ fmt.Println(err) } iferr!=nil{ fmt.Println(err) } context2.Output=os.Stdout fmt.Println(2enter) _,而且提供了一条从php向golang迁徙的滑腻迁徙路径,go担保生涯php的当前上下文,声名协程是并发的,err:=engine.New() engineLock=sync.Mutex{} iferr!=nil{ fmt.Println(err) } _,修悔改的github.com/deuill/go-php的源代码在:https://github.com/taowen/go-... 完备的php/go殽杂协程的demo: packagemain import( fmt github.com/deuill/go-php/engine os runtime time sync ) typeTestObjstruct{} funcnewTestObj(args[]interface{})interface{}{ returnTestObj{} } varengineLock*sync.Mutex func(self*TestObj)Hello(){ oldServerCtx:=engine.ServerContextGet() fmt.Println(oldServerCtx) deferengine.ServerContextSet(oldServerCtx) oldExecutorCtx:=engine.ExecutorContextGet() fmt.Println(oldExecutorCtx) deferengine.ExecutorContextSet(oldExecutorCtx) oldCoreCtx:=engine.CoreContextGet() fmt.Println(oldCoreCtx) deferengine.CoreContextSet(oldCoreCtx) engineLock.Unlock() deferengineLock.Lock() time.Sleep(time.Second) fmt.Println(sleepdone) } funcmain(){ runtime.GOMAXPROCS(1) theEngine,err=context1.Eval($testObj=newTestObj();$testObj-Hello();) fmt.Println(1back) iferr!=nil{ fmt.Println(err) } //theEngine.DestroyContext(context1) fmt.Println(1done) wg.Done() }() fmt.Println(2) gofunc(){ engineLock.Lock() deferengineLock.Unlock() context2,err=theEngine.Define(TestObj, 设法很简朴,假如耗时很长,在i7-6700k上,php必要yield到其他协程时,从php里挪用go提供的子函数时,相同python用gevent的结果,err=context2.Eval($testObj=newTestObj();$testObj-Hello();) fmt.Println(2back) iferr!=nil{ fmt.Println(err) } //theEngine.DestroyContext(context2) fmt.Println(2done) wg.Done() }() wg.Wait() after:=time.Now() fmt.Println(after.Sub(before)) }

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读