【问题标题】:Is there any alternative to the websockets for using in shared hosting是否有任何替代 websockets 用于共享主机
【发布时间】:2014-01-22 19:46:24
【问题描述】:

在共享主机中使用 websocket 有什么替代方案吗?我知道 node.js、socket.io、Express.js 但不能在共享主机中使用它们。所以,如果有任何用于制作实时网站的替代方法,请告诉我。

【问题讨论】:

  • 最好的办法是获得一个 VPS,它们的价格低至 5 美元/月
  • 获取 VPS。由于其内部服务器组织,共享托管站点通常具有某些限制。 stackoverflow.com/questions/17529613/…
  • @Ineentho 您是指从办公室或家里托管的网络服务器吗?如果是这样的话,我在巴基斯坦就很难了,而且有电力减载。所以,请告诉我还有什么可以用的吗?

标签: javascript php ajax real-time


【解决方案1】:

我认为不错的选择是“服务器发送事件”,它是一种方式,但我认为在大多数情况下它比 Websockets 更好,因为它更容易设置,因为不需要特殊的服务器或库,也不需要遵循额外的协议, 只是来自phpechojavascript 中的onmessage

快速示例(来自https://www.w3schools.com/html/html5_serversentevents.asp):

Javascript

var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
  document.getElementById("result").innerHTML += event.data + "<br>";
};

PHP

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

$time = date('r');
echo "data: The server time is: {$time}\n\n";
flush();
?>

【讨论】:

  • IMO 这确实是最好的答案。在接受的答案中提出的建议看起来不能满足 OP 的需求。 SSE 确实是实现这一目标的方式。
  • 虽然服务器发送的事件并不能很好地与 apache 配合使用
  • 在我的共享主机上,服务器不发送任何消息。在本地主机它工作。我该如何调试它?
【解决方案2】:

如果您的共享主机提供 PHP 支持,您可以使用 PHP 中的 WebSockets 库之一:

要安装 Ratchet,请阅读我在 how to install Composer on a shared hosting 上的回答。

或者,您可以使用我的项目Node.php 在共享主机上安装 Node.js。

【讨论】:

  • 是不是说rachet可以在共享主机账户中运行
  • 您建议的选项基于独立服务器
  • 如果您有ssh 访问权限,您可以使用websocketd 易于使用、快速实施且免费
【解决方案3】:

您可以考虑使用像PubNub 这样的托管实时网络在共享主机上进行实时通信。使用像 PubNub 这样的托管实时解决方案意味着您无需担心开放端口或持久进程。

这里有一个完整的 hello world 教程可帮助您开始使用 PubNub 博客: http://www.pubnub.com/blog/php-push-api-walkthrough/

下面是一个简单的例子。

让我们看看开发人员如何在 PHP 之间创建通道 和 JavaScript。最常见的实时使用模式 首先说明应用。一个 JavaScript 浏览器(比如 Firefox)将订阅和收听消息 PUBNU.订阅()。然后 PHP 将推送消息 $pubnub.publish()。

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

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

现在使用 PHP 发布消息以调用 JavaScript 警报框。

## 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!' ) ));

此 PHP 代码将向正在监听的 JavaScript 浏览器发送消息 “我的测试频道”频道。当这个 PHP 代码执行时,一个 JavaScript 浏览器将接收 PHP 数组并显示警告消息 “你好!”。

http://www.pubnub.com/blog/php-push-api-walkthrough/#sthash.jI8zntnL.dpuf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多