1

HTML5 /JSAPIを使用して簡単なWebSocketの例を作成しようとしています。サーバーで追跡した結果に基づくと、ソケットは接続しているように見えますが、どのイベントも発生しません(、、、onopenなどonmessageonclose。私はFlash開発者なので、JavaScriptのデバッグはあまり得意ではなく、誰かが私を助けてくれることを望んでいます。これが私が使用しているクライアント側のコードです:

<script type="text/javascript" charset="utf-8">
    function startSocket()
    {
        if("WebSocket" in window)
        {
            var ws = new WebSocket("ws://localhost:1740");

            ws.onopen = function() {
                window.alert("open!");
            }

            ws.onmessage = function(event) {
                window.alert(event.data);
            }
            
            ws.onclose = function() {
                window.alert("Closed");
            }   
            
            ws.onerror = function() {
                window.alert("trouble in paradise");
            }           
        }
        
    }
    

</script>

そして、これが私のソケットサーバーコードです(これはFlashからは問題なく動作しますが、それは何の意味もないかもしれません):

<?php

create_connection('localhost',1740);

function create_connection($host,$port)
{
    $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
    
    if (!is_resource($socket)) {
        echo 'Unable to create socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
    } else {
        echo "Socket created.\n";
    }
    
    if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
        echo 'Unable to set option on socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
    } else {
        echo "Set options on socket.\n";
    }
    
    if (!socket_bind($socket, $host, $port)) {
        echo 'Unable to bind socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
    } else {
        echo "Socket bound to port $port.\n";
    }
    
    if (!socket_listen($socket,SOMAXCONN)) {
        echo 'Unable to listen on socket: ' . socket_strerror(socket_last_error());
    } else {
        echo "Listening on the socket.\n";
    }
    
    while (true)
    {
        $connection = @socket_accept($socket);
        
        if($connection)
        {       
            echo "Client $connection connected!\n";
            send_data($connection);

        } else {
            echo "Bad connection.";
        }
    }
}

function send_data($connection)
{
    echo $connection;
    // Create a number between 30 and 32 that will be our initial stock price.
    $stock_price = rand(30,32);
    while (true)
    {
        socket_write($connection,"$stock_price\n",strlen("$stock_price\n"));
        sleep(1);
        
        // Generate a random number that will represent how much our stock price
        // will change and then make that number a decimal and attach it to the 
        // previous price.
        $stock_offset = rand(-50,50);
        $stock_price = $stock_price + ($stock_offset/100);
        echo "$stock_price\n";
    }
}


?>
4

2 に答える 2

1

コード内の別の場所に電話をかけstartSocket()ていますか?

私はこのコードが機能することを知っています。あなたはそれを適応させることができるかもしれません:http://github.com/dshaw/zombo-socket/blob/master/zombocom-client.html

于 2010-06-28T19:21:54.087 に答える
1

これは完全に明らかなことかもしれませんが、他の誰かがこれを取得した場合、問題はハンドシェイクを追加する必要があることです。Flashではこれは必須ではなく、まだ完全には理解していませんが、このプロジェクト(http://code.google.com/p/phpwebsocket/ )を変更することができ、想定どおりに機能しました。私のsocket_acceptコードが実行された後にgethandshakeコードを追加します。

于 2010-06-28T22:34:01.163 に答える