2013-05-01 115 views
0

我正在使用PHP(Drupal)编写的网站上工作。外部网站将与其交互(例如,将数据推入)。基于PHP的网站推送通知

我想要做的是在外部网站推送与他们相关的数据时向用户发送推送通知。我不想做任何类型的投票,我宁愿使用套接字等。

所以一般过程会是这样的

我真的不能找到你怎么可以做这样的事情有什么好的资源。我查看了node.js,但我不确定它是否是我想要的。我觉得通知服务器将不得不通过套接字与客户端进行通信 - 但是这看起来好像是一个php套接字与javascript套接字交谈,而我所处的每个地方似乎都认为这是非常困难或不可能的。

有什么办法可以达到这个目的?

+0

谷歌发现这个:http://socket.io/ – 2013-05-01 07:05:19

回答

0

我最终找到this

我的申请,我想我会用Ajax的方法有较大的超时。这似乎是最容易和最快的。

0

参见:

如果你这样做,虽然对像Apache上运行PHP,与连接的客户端的合理*号的,你很快就会发现你的服务器资源耗尽。我会推荐一种替代解决方案 - 或者像棘轮这样基于PHP的独立解决方案,或者使用托管服务,如Pusher(我工作的人)。

*“合理”实际上取决于一些事情。如果你有一个拥有大量内核和内存的服务器,那么你当然仍然可以处理一个“合理的”(希望这在上下文中更有意义)多个并发请求(持久连接)。但是,如果您使用为实时Web功能而构建的技术(持有开放式持续连接),那么您需要扩展的点将大大​​降低 - 在需要升级服务器或负载平衡之前,您将能够处理更多的同时连接另一台服务器

Apache是​​根据请求/响应范例构建的。所以,当一个请求进入时,它会为该请求分配一堆资源。该请求执行(DB查询,HTML/JSON/XML生成),并以结果进行响应。问题是,如果这个请求被保持开放 - 因为它需要持续连接 - 那么“一堆资源”将与该请求保持联系。

实时web服务器的构建方式不同。处理传入请求并保持该连接的位保持尽可能轻 - 只保留很少的资源。然后处理由后台工作人员处理(确切地说,将依赖于技术架构),这意味着当创建持续连接时,这些连接所使用的资源保持最小。这留下了剩余资源可供处理。

+0

什么是“合理”数量的连接客户端? – 2013-05-02 01:24:11

+0

好问题,我应该澄清。我会更新我的答案。 – leggetter 2013-05-02 08:46:33

1

考虑使用像PubNub这样的服务。你不需要担心NodeJS或者websockets。将PubNub插入PHP和你的前端,你就会全部设置好。

下面是教程的摘要版本在这里找到的文本: http://www.pubnub.com/blog/php-push-api-walkthrough/

JavaScript的PHP的推式API的“Hello World”

enter image description here

这PHP代码将消息发送到一个JavaScript浏览器在'my_test_channel'频道上收听。当此PHP代码执行时,JavaScript浏览器将收到PHP数组并显示“hello!”警报消息。

## Publish Messages To a JavaScript Browser 
$pubnub = new Pubnub('publish_key', 'subscribe_key'); 
$pubnub->publish(array(
'channel' => 'my_test_channel', 
'message' => array('some_text' => 'hello!') 
)); 

上面的JavaScript是完全跨浏览器兼容的。该代码将监听'my_test_channel'频道上发布的消息。收到消息时,JavaScript会验证消息对象中是否存在'some_text'。如果此属性存在,则显示一个警报框!

PUBNUB.subscribe({ channel : 'my_test_channel' }, 
function(message) { 
if ('some_text' in message) { 
alert(message.some_text); 
} 
});