手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表2025年07月的文章

思路的变迁:go memcachep

前言

最近在项目中写了一个小型 的socket服务器,于是就需要PHPclient来向他发送和接收数据,但是这时带来的问题,如果php每次创建socket连接1是开销比较大,2是连接远程性能可能也不佳,于是进行了曲线过国的过程,在本地用go写了一个server,php只向本地发送数据,由本地的server长连接到socket服务器,这样开销就会小很多(之所以这样,是因为socket服务器需要登录验证,PHP如果为了发个包,每次都登录验证消耗太大)
 
过程
在用go写server的过程中,遇到了这种问题,原来用C写的server,我们担心C server接受数据慢或者担心并发不够,于是php在发送数据的时候,用的是shm_系列函数,但发现shm系列函数不太稳定,正常使用使用就会溢出。于是转成了msg_xxx系列函数,并调整了系统参数,使得发送和接收的最大队列提高了很多
但是go lang对msg_xxx支持的不好,首先他没有自带,其次在调用RawSyscall的时候(参考了hover给的c函数中的参数,结果是go可以msg_send,但不能msg_receive,总说参数长度不对),最后,其实我是不想用cgo啦。
最后我参考了“囧囧孙”的网站(www.jiongsun.com/2012/12/38.html),实现了一个udp server。当然在这之前,我已经实现了一个http server的方案,不过我觉得本地udp server的话应该会更快。
其实,我觉得本地如果操作同一个管道文件,应该会更方便更快,毕竟,只是php写go读(但因为对系统的底层了解不多,也没有找到相应过多的资料,就暂时放弃了。比如,我看到了php://fd/1之类的,但没有实际例子也没有过多的在那里看。怕浪费太多的时间 )
 
转变
其实转变就在昨天,asta的群里,有个名为“囧”的朋友发布了一个网站(https://github.com/xiaojiong/memcachep),并说明他的go server是按照memcache的协议标准来实现的,也就是说,PHP只需要使用new memcache('server','port'),连接上server,然后get/set就OK了。这让我突然之间豁然开朗。
是啊,我在远程服务器实现了socket server,那个socket server是为其他平台服务,我PHP连接是比较麻烦,但如果我专门现实了一个GET/SET的接口,PHP发送过去不就OK了?也不用PHP写socket_create之类的函数,也不需要php来担心一些其他可能发生的问题。甚至如果以后socket server有多台了,我这里也可以利用memcache的addServer来实现多台发送?(当然也要socket server实现)。性能?可能是会略有降低,但难道,本地一个go server/php udp连接就一定高吗?开的服务越多,环节越长,出错的概率就会越高,如果我只是单点直接向socket server发送数据,这样出错还是有据可查的
 
准备
昨天就开始准备重写原来的socket server了。
socket server上面要做的事情比较多:
1、转发PHP发来的各种消息
2、转发失败后需要发送apns通知
3、在发通知前,需要查询数据库中每个用户ID的token,并更新多少未读信息
之前的server只做了纯转发功能。准备再花上一段时间把它搞定。
 
 

Tags: memcahep

supervisor 守护程序

最近听到supervisor的机会越来越多了,主要是因为越来越喜欢将程序放到底层去运行,但又需要守护程序来监控它,万一它挂了怎么办?如果为每个程序都写上这样的脚本,那得写多少啊?

结果,在最近的看到的网上的内容里,就看到一大堆人在说用supervisor吧。

1、Asta谢的《build-web-application-with-golang》:第12章:应用部署

2、还是Asta谢的beego框架:Supervisord

3、来自the5fire的:进程管理器supervisor的使用(django实例)

其实还有很多关于这样的内容,就不一一贴出来了。只是beego框架中的介绍会相对比较简单,所以可以拿来当教程,再加上我的程序可能也会趋向于使用go来开发,就转贴一下这篇博客吧,只有三步:

  1. 安装 setuptools

    wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg   sh setuptools-0.6c11-py2.7.egg    easy_install supervisor   echo_supervisord_conf >/etc/supervisord.conf   mkdir /etc/supervisord.conf.d 
  2. 修改配置 /etc/supervisord.conf

    [include] files = /etc/supervisord.conf.d/*.conf 
  3. 新建管理的应用

    cd /etc/supervisord.conf.d vim beepkg.conf 

    配置文件:

    [program:beepkg] directory = /opt/app/beepkg command = /opt/app/beepkg/beepkg autostart = true startsecs = 5 user = root redirect_stderr = true stdout_logfile = /var/log/supervisord/beepkg.log

Tags: supervisor

安装St2的Dash插件

st2目前应该是快超越Editplus成为广大开发人员手中必备的编辑器了吧?在写go的时候,我也用上了它,而且也用了gosublime来做为辅助,虽然,无闻说只要按cmd+.,cmd+h,就可以进行跳转查看变量等,但我有dash,可以看任何语言,我该怎么配置?

其实官方有现成的例子,在这里,你也可以看到英文版:https://sublime.wbond.net/packages/DashDoc,我稍微中文化一下吧

1、打开st2的菜单:preferences -> package control -> install package,搜索dashdoc进行安装,安装完成后就可以使用了(dashdoc功能只支持mac)

2、将光标移到需要查询的变量的英文上,按ctrl+h,即会自动打开dash,跳转到指定函数(测试了一下,只要你文件名的后缀正确,你在dash里又安装了相应的文档包,dash还是可以直接认出来的)非常方便

以下是小小的例子,打开一个golang的程序,将光标移到函数名上:

大小: 18.08 K
尺寸: 329 x 174
浏览: 2679 次
点击打开新窗口浏览全图

按下ctrl+h,

大小: 42.24 K
尺寸: 500 x 200
浏览: 2677 次
点击打开新窗口浏览全图

OK,我们还想看这个函数的源码,点击右边的函数名(该功能是看具体文档来实现的,目前go的文档是可以这样看源码的,PHP的不行,其他的未知)

大小: 41.68 K
尺寸: 500 x 273
浏览: 2655 次
点击打开新窗口浏览全图

有没有感觉到,高端大气上档次?想知道dash还支持些啥 ,其实APP内部已经告诉你了:

大小: 60.88 K
尺寸: 483 x 376
浏览: 2821 次
点击打开新窗口浏览全图

其实appcode是用idea的核心的,所以appcode的plugin能够在idea系的软件上安装,比如phpstorm,安装后也就可以跳转了,具体按哪个快捷键,我就不告诉你了,自己安装一下就知道了

Tags: st2, dash, mac, phpstorm

PhpStorm 7 EAP 131.61

看到标题不要以为我是来介绍新品的,其实我是来吐槽的。

看changelog里,这里改进了很多,但居然有一个功能坏掉了。这个功能。。。。是我天天要用,几乎时时要用的功能。难道phpstorm的用户已到了纯OO时代?不再需要写else了??
 
else后面的大括号居然不再自动完成了。而且默认输入else的时候就是一个错误的红色(红色可能与我的配色有关)。实在让人受不了。 
虽然这次有一些feture还算不错。
 

From the PHP side, this build delivers:

  • Scope highlighting for PHP control structures – alternative syntax (WI-566)
  • Type inference fixes (e.g. @return static[] now works as it should, WI-13242)
  • Symfony Console standalone for Laravel and Doctrine (WI-18196)
  • PHPUnit on Server fixes
  • Traits-related inspections are introduced (class can’t extend trait, interface can’t extend traits)
  • and more bug fixes and improvements
但毕竟else认错也太不科学了。这应该算是一个低级bug了吧?
 
 

Tags: phpstorm

网站挂了半天

其实从昨天晚上11点多开始就挂了。VPS提供商对我说,他们遭受攻击了。他们旗下的几台服务器,全部被攻击,导致无法正常使用。已经联系了美国机房那边

 
有时候想想,技术何苦为难技术,MD,都是吃这碗饭的人,何苦呢。
所幸,中午的时候,恢复了。总算没有达到24小时。和VPS提供商扯了扯皮,继续使用。
 
突然间,我想起我一年前想的,多站互为镜像 之类的想法,然后写个脚本,用来监控,一旦发现有问题了,立刻调用dnspod的接口,更新数据信息
 
不过,人有点懒了,想找个人一起做做事。