【问题标题】:How to receive web socket message from server in client side by html5 socket api如何通过html5 socket api从客户端的服务器接收web socket消息
【发布时间】:2013-11-25 22:27:48
【问题描述】:

从几天开始,我就在与网络套接字作战。但是,现在我无法抓住它。

我设法通过 PHP 构建了一个服务器端文件,该文件将消息发送到特定地址+端口。但是,当我试图通过 HTML5 套接字 api 在客户端访问该消息时,我无法得到它。

这是我的服务器端 PHP cile 代码..

 $address = "127.0.0.1";
 $service_port = 80;

error_reporting(E_ALL);

/* Create a TCP/IP socket. */
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: reason: " . 
    socket_strerror(socket_last_error()) . "\n";
}

echo "Attempting to connect to '$address' on port '$service_port'...";
$result = socket_connect($socket, $address, $service_port);
if ($result === false) {
   echo "socket_connect() failed.\nReason: ($result) " . 
      socket_strerror(socket_last_error($socket)) . "\n";
}

$in = "HEAD / HTTP/1.1\r\n";
$in .= "Host: www.google.com\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';

echo "Sending HTTP HEAD request...";
if(!socket_write($socket, $in, strlen($in)))
{
    $errorcode = socket_last_error();
    $errormsg = socket_strerror($errorcode);

    die("Could not send message on socket : [$errorcode] $errormsg \n");
}
echo "OK.\n";

在我的客户端,我正在使用以下代码。

<script type="text/javascript">    
// Let us open a web socket
var ws = new WebSocket("ws://127.0.0.1:80/");
ws.onopen = function()
{
    // Web Socket is connected, send data using send()
    ws.send("Message to send");
    alert("Message is sent...");
};
ws.onmessage = function (evt) 
{ 
    var received_msg = evt.data;
    alert("Message is received...");
};
ws.onclose = function()
{ 
    // websocket is closed.
    alert("Connection is closed..."); 
};  
</script>

echo "Reading response:\n\n";
while ($out = socket_read($socket, 2048)) {
    echo "<br><br>$out<br><br>";
}

socket_close($socket);    

但是,我无法使用此 javascript 接收服务器端消息。

这是我第一次尝试将手放在网络套接字中。所以,我完全不知道该怎么做。我也在谷歌搜索了很多,但无法弄清楚我在哪里以及我做错了什么。

问候

【问题讨论】:

  • 你确定你的浏览器支持 websockets 吗?
  • @KyleK 我正在使用最新的 Chrome 版本 27.0.1453.116 m。
  • 你找到解决方案了吗?

标签: php javascript html websocket


【解决方案1】:

最好使用1024以上的其他端口,因为1024以下的端口需要root权限,而你使用的这个端口已经为互联网服务尝试使用:

$ telnet servername portNumber 

在shell或cmd下测试,然后就可以尝试使用websocket对象了。

【讨论】:

    【解决方案2】:

    在连接到 websockets 之前,检查你的用户使用的浏览器是否支持它们总是好的做法......就像这样......

     //First check for firefox, and set it to regular websocket...since Mozilla API is                   differently named
    if (window.MozWebSocket) {
     window.WebSocket = window.MozWebSocket;
     }
    
    //Then continue with checking
    var connection = {};
     function connect() {
     if(window.WebSocket != undefined) {
    
     if(connection.readyState === undefined || connection.readyState > 1)
      {
        connection = new WebSocket('ws://127.0.0.1:80');
      }
      }
     }
    

    【讨论】:

    • 我已经在 mozilla 中测试了你的脚本,但它显示出奇怪的行为。此脚本显示我的 mozilla 不支持 Web 套接字。但是,当我执行第二个脚本时,它显示“Firefox 无法在 ws://127.0.0.1/ 建立与服务器的连接。connection = new WebSocket('ws://127.0.0.1:80') ;"
    • 这是奇怪的行为吗?你用的是什么版本?
    • 我的 Mozilla 版本:21.0
    • 奇怪,我发现这个spamfighter.com/… 可能是你需要启用它们??不确定
    • 那个链接是关于什么的?当我点击它时,它会显示一些“找不到页面”错误。
    猜你喜欢
    • 2016-05-27
    • 1970-01-01
    • 2023-04-03
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多