使用websockets通过localhost连接remotehost

时间:2013-11-20 04:31:31

标签: javascript php websocket

我正在使用谷歌托管的this网络套件

var host = "ws://localhost:12345/websocket/server.php";
try{
  socket = new WebSocket(host);
  log('WebSocket - status '+socket.readyState);
  socket.onopen    = function(msg){ log("Welcome - status "+this.readyState); };
  socket.onmessage = function(msg){ log("Received: "+msg.data); };
  socket.onclose   = function(msg){ log("Disconnected - status "+this.readyState); };
}
catch(ex){ log(ex); }

这与remotehost有关吗?

var host = "ws://example.com:12345/websocket/server.php";

我想使用websockets使用CURL进行POST更改。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"https://xxxx.com/ccc.php");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_CAINFO, "esoftcareers.crt");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 
http_build_query(array('PHPSESSID' => $id ,'query' => $resultQuery,'operator' => $operator,'database' => DATABASE)));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);

2 个答案:

答案 0 :(得分:1)

首先让我从这开始回答:

  

我想使用websockets使用CURL进行POST更改。

WebSocket首先是基于浏览器(非服务器到服务器)应用程序的protocol,需要与服务器进行双向通信。您希望在curl中使用use http/https protocols(因为post是HTTP协议的方法),这是TCP上的层。 WebSocket也通过TCP layered。所以你想要用另一个TCP层。现在你不能这样做,因为php curl没有support websocket协议。而且我认为它在未来仍然是不可改变的。

同样post是HTTP协议的方法,它具有正文并且有一个响应。 WebSocket是没有主体的协议,它使用一系列帧。所以在websocket协议中没有类似post方法的东西,这就是他的特色。

你不能发送一些服务器而忘记它在websocket中,因为socket意味着沟通。使用websocket时,您必须与服务器通信。在HTTP中通过AJAX,您可以向服务器发送内容并使用异步回调来处理响应。在websocket中,如果你关闭它,你将丢失所有数据作为回应。

您可以使用长拉请求通过curl模拟websocket。但它仍然是HTTP协议,而不是websocket。所以现在curl不能使用websocket协议。

第二个。关于websocket协议源(通过跨域)。是的,websocket可以使用跨域,因为它use基于源的安全模型。因此,如果您尝试通过域中的WebSocket打开与Web服务器的连接,Origin请求头服务器中将缺少此错误。{1}}将返回appropriate HTTP错误。通常默认为403 HTTP错误。在其他情况下,一切都必须没问题。

答案 1 :(得分:0)

服务器和客户端都应该知道websocket实现,并且第一次握手应该得出结论,他们都知道。来自服务器ws:响应的第一行的下一行... "Upgrade: WebSocket\r\n"。如果服务器没有这样的响应,期望客户端的websocket应该理解在当前联系的服务器中不支持websocket并且回退到正常通信。

已添加注意: 除非您具有使用此协议实现更新的高级curl命令,否则普通卷曲事物无法从此协议中受益。请找thisthis