亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Websockets:從php服務器向客戶端發送消息

Websockets:從php服務器向客戶端發送消息

PHP
狐的傳說 2023-04-02 14:59:11
我正在嘗試將消息從我的文件 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 視為一條消息:/有任何想法嗎?:)
查看完整描述

1 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

我現在正在使用 SSE 服務器發送的事件并且它可以工作!但是我想知道我的代碼是否“正確”或者是否有更“合適”的方法。


我正在使用會話 superglobals 將服務器信息更改傳遞給另一個文件,該文件不斷將其作為事件流讀取(這就是 SSE 的工作方式)。


索引.php:


      <!DOCTYPE html>

      <html dir="ltr">

        <head>

          <meta charset="utf-8">

          <script type="text/javascript" src="jquery.js">

          </script>

          <script type="text/javascript" src="stream.js">

          </script>

        </head>

        <body>

      <a>Receive message</a>

        </body>

      </html>

stream.js(監聽服務器):


var serv = new EventSource("server.php");


  serv.onmessage = function(e) {

      var jdata = JSON.parse(e.data);

      console.log(jdata.message);

  };


  serv.onopen = function(e) {

        console.log('Connection opened');

  }


  $(document).ready(function(){

    $('a').click(function(){

      receive_msg();

    });

  });


  function receive_msg(){

    $.ajax({

     type: "POST",

     url: 'controller.php',

     data: {action: 'send'}

   });

  }

控制器.php:


    <?php

session_start();

if (isset($_POST['action'])) {

  $_SESSION['server']="you have received a message";

}

服務器.php:


    <?php

session_start();

header('Content-Type: text/event-stream');

header('Cache-Control: no-cache');



if (isset($_SESSION['server'])) {

  $data = array(

      'message'=> $_SESSION['server']

  );

  $data = json_encode($data);

  echo "data: {$data}\n\n";

  unset($_SESSION['server']);

}

它的工作方式:


客戶端連接到 server.php 并不斷讀取文件。當服務器要向客戶端發送消息時,它會創建一個會話變量。Server.php 讀取變量并將其傳遞到我的 js 文件。然后變量被銷毀,所以我們只傳遞一次消息。


查看完整回答
反對 回復 2023-04-02
  • 1 回答
  • 0 關注
  • 265 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號