Javascript 基于http的php ZMQ推送集成
我正在尝试使用php和本机zmq实现推送集成。我已成功地将消息发送到服务器,但我的问题是无法使用js Websocket()将消息推送到浏览器。我说WebSocket连接到“ws://127.0.0.1:8080/”失败:WebSocket握手时出错:状态行无效 以下是我的客户代码:Javascript 基于http的php ZMQ推送集成,javascript,php,websocket,zeromq,pushstate,Javascript,Php,Websocket,Zeromq,Pushstate,我正在尝试使用php和本机zmq实现推送集成。我已成功地将消息发送到服务器,但我的问题是无法使用js Websocket()将消息推送到浏览器。我说WebSocket连接到“ws://127.0.0.1:8080/”失败:WebSocket握手时出错:状态行无效 以下是我的客户代码: <?php try { function send($data) { $context = new ZMQContext(); $push = new ZMQSocket($c
<?php
try {
function send($data) {
$context = new ZMQContext();
$push = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$push->connect("tcp://localhost:5555");
$push->send($data);
}
if(isset($_POST["username"])) {
$envelope = array(
"from" => "client",
"to" => "owner",
"msg" => $_POST["username"]
);
send(json_encode($envelope)); # send the data to server
}
}
catch( Exception $e ) {
echo $e->getMessage();
}
?>
这是我的owner.php,我希望通过浏览器中的Websocket发送数据:
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h2>Message</h2>
<ul id="messagelog">
</ul>
<script>
var logger = document.getElementById("messagelog");
var conn = new WebSocket("ws://127.0.0.1:8080"); # the error is pointing here.
conn.onOpen = function(e) {
console.log("connection established");
}
conn.onMessage = function(data) {
console.log("recieved: ", data);
}
conn.onError = function(e) {
console.log("connection error:", e);
}
conn.onClose = function(e) {
console.log("connection closed~");
}
</script>
</body>
消息
var logger=document.getElementById(“messagelog”);
var conn=newwebsocket(“ws://127.0.0.1:8080”)#错误指向这里。
conn.onOpen=功能(e){
控制台日志(“建立连接”);
}
conn.onMessage=函数(数据){
console.log(“接收:”,数据);
}
conn.onError=功能(e){
日志(“连接错误:”,e);
}
conn.onClose=函数(e){
log(“连接关闭~”);
}
请告诉我我错过了什么。谢谢。您无法将websocket连接到zmq套接字*,它们是不同的通信协议(websocket更像是传统的套接字,zmq套接字更像是添加额外功能的抽象)。您需要在服务器上设置接收websocket连接的方式
*您可以使用原始套接字类型来完成这项工作,但这有点高级,除非您知道自己在做什么,否则不应该输入。您根本没有建立协议通信。您成功地接收到了消息,但从未通过解析消息并发送适当的响应来确认您的服务器确实是WebSocket服务器 由于您已经在使用PHP和ZeroMQ,最简单的方法是使用它,除其他外,它能够理解WebSocket协议,并将其交付给编码为tnetstring的ZeroMQ端点(类似json的编码格式,不需要解析) 另一个解决方案是在代码中完全支持WebSocket协议——这超出了本问答的范围
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h2>Message</h2>
<ul id="messagelog">
</ul>
<script>
var logger = document.getElementById("messagelog");
var conn = new WebSocket("ws://127.0.0.1:8080"); # the error is pointing here.
conn.onOpen = function(e) {
console.log("connection established");
}
conn.onMessage = function(data) {
console.log("recieved: ", data);
}
conn.onError = function(e) {
console.log("connection error:", e);
}
conn.onClose = function(e) {
console.log("connection closed~");
}
</script>
</body>