2015-07-21 152 views
1

我有一個問題所困擾:我使用PHP棘輪 socketo.me瀏覽器客戶端無法連接到棘齒城的WebSocket服務器

我的服務器正在運行並偵聽端口8082開發的瑞奇網絡套接字服務器

require 'vendor/autoload.php'; 

    $loop = React\EventLoop\Factory::create(); 
    $pusher = new MyApp\Pusher; 

    // Listen for the web server to make a ZeroMQ push after an ajax request 
    $context = new React\ZMQ\Context($loop); 
    $pull = $context->getSocket(ZMQ::SOCKET_PULL); 
    $pull->bind('tcp://127.0.0.1:5551'); // Binding to 127.0.0.1 means the only client that can connect is itself 
    $pull->on('message', array($pusher, 'onBlogEntry')); 

    // Set up our WebSocket server for clients wanting real-time updates 
    $webSock = new React\Socket\Server($loop); 
    $webSock->listen(8082); // Binding to 0.0.0.0 means remotes can connect 
    $webServer = new Ratchet\Server\IoServer(
     new Ratchet\Http\HttpServer(
      new Ratchet\WebSocket\WsServer(
       new Ratchet\Wamp\WampServer(
        $pusher 
       ) 
      ) 
     ), 
     $webSock 
    ); 

    $loop->run(); 

我的後腳本:post.php

<?php 
     error_reporting(E_ALL); 
     ini_set("display_errors", 1); 

     // post.php ??? 
     // This all was here before ;) 
     $entryData = array(
      'category' => 'kittensCategory' 
      , 'title' => 'title : check websocket' 
      , 'article' => 'article : check websocket' 
      , 'when'  => time() 
     ); 

     // This is our new stuff 
     $context = new ZMQContext(); 
     $socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'Pusher'); 
     $socket->connect("tcp://127.0.0.1:5551"); 

     $socket->send(json_encode($entryData)); 

My pusher.php 


<?php 
namespace MyApp; 
use Ratchet\ConnectionInterface; 
use Ratchet\Wamp\WampServerInterface; 

class Pusher implements WampServerInterface { 
    /** 
    * A lookup of all the topics clients have subscribed to 
    */ 
    protected $subscribedTopics = array(); 

    public function __construct() { 
     $this->clients = new \SplObjectStorage; 
    } 

    public function onSubscribe(ConnectionInterface $conn, $topic) { 
     print_r($topic); 
     die; 
     $this->subscribedTopics[$topic->getId()] = $topic; 
    } 

    /** 
    * @param string JSON'ified string we'll receive from ZeroMQ 
    */ 
    public function onBlogEntry($entry) { 
     $entryData = json_decode($entry, true); 

     // If the lookup topic object isn't set there is no one to publish to 
     if (!array_key_exists($entryData['category'], $this->subscribedTopics)) { 
      return; 
     } 

     $topic = $this->subscribedTopics[$entryData['category']]; 

     // re-send the data to all the clients subscribed to that category 
     $topic->broadcast($entryData); 
    } 


    public function onUnSubscribe(ConnectionInterface $conn, $topic) { 
    } 
    public function onOpen(ConnectionInterface $conn) { 
     // Store the new connection to send messages to later 
     $this->clients->attach($conn); 
     echo "New connection! ({$conn->resourceId})\n"; 
    } 
    public function onClose(ConnectionInterface $conn) { 
    } 
    public function onCall(ConnectionInterface $conn, $id, $topic, array $params) { 
     // In this application if clients send data it's because the user hacked around in console 
     $conn->callError($id, $topic, 'You are not allowed to make calls')->close(); 
    } 
    public function onPublish(ConnectionInterface $conn, $topic, $event, array $exclude, array $eligible) { 
     // In this application if clients send data it's because the user hacked around in console 
     $conn->close(); 
    } 
    public function onError(ConnectionInterface $conn, \Exception $e) { 
    } 
} 

我檢查了我的服務器通過從post.php發送數據到了,我在onBlogEntry()方法


的問題是,當瀏覽器嘗試打開的連接獲取數據我服務器它總是給連接超時錯誤:

<script src="http://autobahn.s3.amazonaws.com/js/autobahn.min.js"></script> 
<script> 
var conn = new ab.Session('ws://simplifi.org:8082', 
    function() { 
     conn.subscribe('kittensCategory', function(topic, data) { 
      console.log('New article published to category "' + topic + '" : ' + data.title); 
     }); 
    }, 
    function() { 
     console.warn('WebSocket connection closed'); 
    }, 
    {'skipSubprotocolCheck': true} 
); 
</script> 

任何人有任何想法關於有什麼不對請幫忙。

回答

0

好吧,端口被阻止形式防火牆我打開它,它工作正常。

相關問題