在workman中,PHP当做后台语言怎么样才能给前台js页面主动发送代码啊?

gzchen

各位大神好。
我的功能需求是:后台主动像前端js推送动态(例如你被赞了,评论了这些)。
本来是用ajax长轮询了,但是中间遇到了点问题(session锁冲突,我在TP框架下怎么也无法解决这个问题)并且考虑到长轮询效率也不怎么高,就想到用websocket,最终采用workerman。
从下午弄到现在总算摸清楚workerman了,但是我现在遇到一个问题,就是workman好像无法主动往客户端推送消息?有一个onmessage但是也要客户端主动发起啊,这样的话和长轮询一样了。

到底有木有一个方法是专门提供主动推送消息的呢?
http://wenda.workerman.net/?/question/508 我看了这篇文章,貌似是不能用http请求(必须先请求),而是用tcp请求(服务器可以主动推客户端)。但是他里面的代码和我的需求好像不是很一样,我不知道怎么调试。

大神们可以给些建议吗?在线等,急

5026 1 0
1个回答

walkor

你的需求和 http://wenda.workerman.net/?/question/508 实现方法上是一样的,直接用就行。

  • gzchen 2016-06-19

    我不太理解后端推送代码和后端代码的区别,是不是说一个用来启动服务,再用一个方法监听然后实时推送?

  • gzchen 2016-06-19

    那我是不是在后端推送代码加一个while(true)就可以实现效果了?

  • walkor 2016-06-19

    光看没用,试着运行下就知道了。不用while(true)

  • gzchen 2016-06-19

    @1:我运行了,但貌似还是要while(true)??不然如何一直持续性输出呢?crontab定时调用吗?

  • walkor 2016-06-20

    为何要一直输出,不是点赞或者评论类的才推送么?点赞或者评论时调用stream_socket_client那段代码推送就好了。如果要一直输出,可以用定时器。

  • gzchen 2016-06-20

    @1:我要实现的效果确实是点赞或者评论才推送(也就是说我不需要像轮询那样一直while(true)是吗) 但是我ajax评论或者点赞的时候,浏览器走的是http协议,压根无法调用5678那段tcp协议的代码啊?
    那我如何处理呢

  • walkor 2016-06-20

    。。。
    你把那段代码插入到你处理http协议的代码里

  • gzchen 2016-06-20

    那段代码无法直接用浏览器访问啊。
    不好意思我比较愚笨。。

  • walkor 2016-06-20

    假设处理评论的url是http://xxxx.com/?module=comment&action=save
    把那段插入到处理这个url的代码里面。

  • walkor 2016-06-20

    也就是tp里面

  • gzchen 2016-06-20

    @1:谢谢,我试试

  • gzchen 2016-06-20

    @1:进程数只能为1吗?你在 http://wenda.workerman.net/?/question/508 的解释我有些不懂,count只能为1?有没办法增加?1的话会不会影响效率呀??

  • walkor 2016-06-20

    单进程能撑10W的在线用户。

  • gzchen 2016-06-20

    @1:好的对我来说也足够了,但我现在有个疑问,我如何判断每个用户的用户id呢?那个uid是要设置成死的吗?还是动态设置成用户id呢?

  • walkor 2016-06-20

    uid就是user id的意思,是你用户的id

  • gzchen 2016-06-20

    @1:但是我打开两个页面测试的话,一次只能推送给一个账号啊。。

  • walkor 2016-06-20

    不懂你说的是什么意思。自己慢慢玩吧,就提示这些了

  • gzchen 2016-06-20

    @1:好吧,我的意思是如果有页面同时在的话,他只能推送到一个页面上。

  • gzchen 2016-06-20

    @1:无论如何也谢谢你了

  • gzchen 2016-06-20

    @1:大神你好,正常的业务逻辑我已经弄出来了,但现在有一个问题。就是如果我开启了N个页面的话(同一个账号),每次后台推送评论,消息那些,只能到一个页面上(到的是最后打开的那个页面,这个问题如何解决呢??

  • walkor 2016-06-20

    自己写代码改造下吧。服务端代码就50行。

  • gzchen 2016-06-20

    @1:它是推送到一个页面上,我如何改呀...设一个循环值循环吗?还是怎么样,这是最后一个问题,希望大神帮下我,昨天忙到现在,我把这个功能做完就去给您捐赠,自学编程的学生党遇到问题真闹心

  • gzchen 2016-06-20

    @1:主要是我他不能同时推送到多个页面,但是我发现新浪微博是可以同时推送到多个页面的,这让我很困惑。

  • walkor 2016-06-20

    不会写的话可以用 http://www.workerman.net/web-sender 试下

  • gzchen 2016-06-20

    @1:我下次再用那个框架了(现在已经做了差不多了如果乱改我怕出问题),workman本身应该支持自动传输到多个页面吧?还是说要经过特殊配置

  • walkor 2016-06-20

    workerman支持,你说的这些属于业务逻辑,要自己写

  • gzchen 2016-06-20

    @1:我虽然传递打开了是多个页面,但我依然是同一个账号的情况下啊啊(也就是同一个给后端listen的uid)。这个应该无法通过业务逻辑吧?

  • gzchen 2016-06-20

    @1:我虽然打开了是多个页面,但我依然是同一个账号的情况下啊啊(也就是同一个给后端listen的uid)。这个应该无法通过业务逻辑吧?

年代过于久远,无法发表回答
🔝