我用SproutCore和PHP作为后端构建了一个相当大的web应用程序。我现在想要的是使用websockets实时更新我的客户端应用程序。据我所知,PHP在处理持久连接方面确实很糟糕。所以我一直在想,我可以使用Go来处理websockets连接,每次收到请求时调用我的PHP脚本(这个包似乎使它成为可能)。
所以我的第一个问题是,你们认为这是一个好主意(一个可行的想法,我还没有找到这样做的人)还是我应该坚持使用PHP ?
如果我使用Go来处理websockets连接,我也一直在想,我可以逐渐从PHP转移到只使用Go(因为它比PHP快得多)。如果我这样做,我将不得不能够从PHP调用一些Go包。这可以用PHP exec
函数完成吗?有没有更好的办法?这是个好主意吗?
Go很适合websocket服务器。我用Go语言构建了websocket服务器,并对它的工作方式非常满意。我在Go websocket服务器上有一个每月处理30万用户的服务,它只使用了亚马逊AWS微实例1%的CPU。再高兴不过了。
Websockets确实需要像Go和Node.js这样的事件驱动框架来最大化服务器资源。像PHP这样的分支web进程比事件驱动框架消耗更多的资源。如果你需要在某些时候从PHP调用Go,我建议使用API调用。虽然exec
也可以。
这是一个老问题,但我对这个问题的看法是……
有一个非常好的php库,正是你所要求的- websockets。它被称为棘轮。我不会使用node.js(过度炒作)或去当php可以做完全相同的事情,它是我最舒服的语言。在大多数情况下,通过websockets获得的一点点性能增益并不值得切换堆栈。
其他有用的链接,如果你打算使用棘轮:
- 后端-棘轮示例
- Frontend - Autobahn WS