Websockets:从php服务器向客户端发送消息

我正在尝试将消息从我的文件 index.php(服务器)发送到使用 websockets 连接的客户端。


我创建客户端连接的 javascript 文件:


var websocket_server = new WebSocket("ws://localhost:4950/");

websocket_server.onopen = function(e) {

  console.log("connected");

}

websocket_server.onmessage = function(e)

{

  console.log('message received from server');

}

索引.php:


$msg = "Message from server";


$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");

socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR,1) or die("prbl options\n");

socket_connect($sock, '127.0.0.1', 4950) or die("could not connect\n");

socket_write($sock, $msg, strlen($msg));

客户端连接到 websocket 是成功的,但是当我运行 PHP 文件时,我什么也没得到(控制台中没有错误和消息)。


换句话说,javascript 不会将我的 socket_write 视为一条消息:/


有任何想法吗?:)


狐的传说
浏览 232回答 1
1回答

aluckdog

我现在正在使用 SSE 服务器发送的事件并且它可以工作!但是我想知道我的代码是否“正确”或者是否有更“合适”的方法。我正在使用会话 superglobals 将服务器信息更改传递给另一个文件,该文件不断将其作为事件流读取(这就是 SSE 的工作方式)。索引.php:&nbsp; &nbsp; &nbsp; <!DOCTYPE html>&nbsp; &nbsp; &nbsp; <html dir="ltr">&nbsp; &nbsp; &nbsp; &nbsp; <head>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <meta charset="utf-8">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <script type="text/javascript" src="jquery.js">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </script>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <script type="text/javascript" src="stream.js">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </script>&nbsp; &nbsp; &nbsp; &nbsp; </head>&nbsp; &nbsp; &nbsp; &nbsp; <body>&nbsp; &nbsp; &nbsp; <a>Receive message</a>&nbsp; &nbsp; &nbsp; &nbsp; </body>&nbsp; &nbsp; &nbsp; </html>stream.js(监听服务器):var serv = new EventSource("server.php");&nbsp; serv.onmessage = function(e) {&nbsp; &nbsp; &nbsp; var jdata = JSON.parse(e.data);&nbsp; &nbsp; &nbsp; console.log(jdata.message);&nbsp; };&nbsp; serv.onopen = function(e) {&nbsp; &nbsp; &nbsp; &nbsp; console.log('Connection opened');&nbsp; }&nbsp; $(document).ready(function(){&nbsp; &nbsp; $('a').click(function(){&nbsp; &nbsp; &nbsp; receive_msg();&nbsp; &nbsp; });&nbsp; });&nbsp; function receive_msg(){&nbsp; &nbsp; $.ajax({&nbsp; &nbsp; &nbsp;type: "POST",&nbsp; &nbsp; &nbsp;url: 'controller.php',&nbsp; &nbsp; &nbsp;data: {action: 'send'}&nbsp; &nbsp;});&nbsp; }控制器.php:&nbsp; &nbsp; <?phpsession_start();if (isset($_POST['action'])) {&nbsp; $_SESSION['server']="you have received a message";}服务器.php:&nbsp; &nbsp; <?phpsession_start();header('Content-Type: text/event-stream');header('Cache-Control: no-cache');if (isset($_SESSION['server'])) {&nbsp; $data = array(&nbsp; &nbsp; &nbsp; 'message'=> $_SESSION['server']&nbsp; );&nbsp; $data = json_encode($data);&nbsp; echo "data: {$data}\n\n";&nbsp; unset($_SESSION['server']);}它的工作方式:客户端连接到 server.php 并不断读取文件。当服务器要向客户端发送消息时,它会创建一个会话变量。Server.php 读取变量并将其传递到我的 js 文件。然后变量被销毁,所以我们只传递一次消息。
打开App,查看更多内容
随时随地看视频慕课网APP