2013-04-16 59 views
5

我有一个相当大的Web应用程序构建SproutCore和PHP作为后端。我现在想要的是使用websockets实时更新我的​​客户端应用程序。 从我所知,PHP处理持续连接真的很糟糕。所以我一直在想,我可以使用Go来处理websockets连接,并在每次收到请求时调用我的PHP脚本(这似乎使package成为可能)。PHP:使用Golang来处理websocket连接

所以我的第一个问题是,你们认为这是一个好主意(和一个可行的想法,我一直无法找到这样做的人)还是应该坚持使用PHP?

如果我使用Go来处理websockets连接,我也一直在想我可以逐步从PHP迁移到只使用Go(因为它比PHP快很多)。如果我这样做,我将不得不从PHP调用一些Go包。这可以通过PHP exec函数完成吗?有没有更好的办法 ?而且,这是一个好主意吗?

回答

9

Go非常适合websocket服务器。我已经在Go中构建了websocket服务器,并对它的工作方式非常满意。我有一个服务在Go websocket服务器上每个月处理30万用户,它几乎不使用Amazon AWS微型实例的1%CPU。不能更快乐。

Websockets确实需要像Go和Node.js这样的事件驱动框架才能最大化服务器资源。像PHP这样的分叉式web进程比事件驱动框架消耗更多的资源。

如果您需要在某个时候从PHP调用Go,我建议使用API​​调用。虽然exec也可以。

+0

似乎大有可为。所以你同意我说每次Go websocket服务器收到请求时调用一个PHP脚本应该比在PHP中处理websocket连接要好得多。 –

+1

我也使用Go来运行我的websocket服务器(其中[this](http://dystroy.org:8004/)),它非常高效和干净,我认为使用PHP来实现这一点确实是一个糟糕的主意 –

+1

调用每次Go websocket服务器收到一个请求时,PHP脚本几乎肯定会是一个更好的解决方案,如果你的任何数据都是可缓存的,那么你可以将它缓存在Go实例中,例如,对于两个,你只使用PHP资源足够长的时间来回答一个请求,所以只要websockets不会不断向PHP推送新的请求,那么PHP进程的总数就会少得多,最后,你将自己的所有PHP代码迁移到Go,实现巨大的效率提升 – Daniel

-1

这是一个老问题,但我对这个问题的两分钱......

有,它正是你所要求的一个很好的PHP库 - WebSockets的。它被称为Ratchet。我不会使用node.js(over hyped),或者当php可以做完全相同的事情时,它就是我最熟悉的语言。在大多数情况下,与websockets相比性能的提升并不值得转换堆栈。如果你打算使用棘轮

其他有用的链接:

+1

棘轮维护不善,他们的例子不适用于最新版本的PHP(5.5+)。尽管目前的实现和它需要的大量依赖关系是一个好主意,但它并不能很好地工作。 – dearsina