gpt4 book ai didi

javascript - php ZMQ 通过 http 推送集成

转载 作者:可可西里 更新时间:2023-11-01 12:57:35 26 4
gpt4 key购买 nike

我正在尝试使用 php 和 native zmq 实现推送集成。我已成功将消息发送到服务器,但我的问题是我无法使用 js Websocket() 将消息推送到浏览器。我说 WebSocket connection to 'ws://127.0.0.1:8080/' failed: Error during WebSocket handshake: Invalid status line

这是我给客户的代码:

<?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();
}

?>

客户

这是我的服务器:

$context = new ZMQContext();

$pull = new ZMQSocket($context, ZMQ::SOCKET_PULL);
$pull->bind("tcp://*:5555"); #this will be my pull socket from client

$push = new ZMQSocket($context, ZMQ::SOCKET_PUSH);
$push->bind("tcp://127.0.0.1:8080"); # this will be the push socket to owner

while(true) {
$data = $pull->recv(); # when I receive the data decode it
$parse_data = json_decode($parse_data);

if($parse_data["to"] == "owner") {
$push->send($parse_data["msg"]); # forward the data to the owner
}
printf("Recieve: %s.\n", $data);
}

这是我的 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>

请告诉我我缺少什么。谢谢。

最佳答案

你根本没有建立协议(protocol)通信。您设法接收了该消息,但您从未通过解析它并发送适当的响应来确认您的服务器确实是 WebSocket 服务器。

由于您已经在使用 PHP 和 ZeroMQ,最简单的方法是使用 Mongrel2除其他外,它能够理解 WebSocket 协议(protocol)并将其传送到编码为 tnetstring(一种类似 json 的编码格式,易于解析)的 ZeroMQ 端点。

另一种解决方案是在您的代码中完全支持 WebSocket 协议(protocol) - 这超出了本问答的范围。

关于javascript - php ZMQ 通过 http 推送集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com