如何接收web套接字消息从服务器在客户端通过html5套接字api


How to receive web socket message from server in client side by html5 socket api

从几天我与web sockets战斗。但是,现在我无法掌握它。

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

这是我的服务器端PHP代码。

 $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接收服务器端消息。

这是我第一次尝试把我的手放在web sockets。所以,我完全不知道该怎么做。我也在谷歌上搜索了很多,但无法找出&我做错了什么。

最好使用1024以上的其他端口,因为1024以下的端口需要root权限,并且您使用的这个端口已经用于internet服务尝试使用:

$ telnet servername portNumber 

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

在连接到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');
  }
  }
 }