首页 > 解决方案 > 套接字代码在 Codeigniter rest api 中不起作用

问题描述

我正在研究codeigniter rest api,同时我需要通过socket推送一些计数消息,所以我使用echo编写了js代码(在php中运行js代码我们需要echo),但是socket代码不起作用,即在接收方,我没有收到任何消息。

rest api 文件中的套接字代码:

     if ($this->db->insert('users', $new_arr)) {
                    echo '<script src="' . base_url("node_modules/socket.io/node_modules/socket.io-client/socket.io.js") . '"></script>';
    echo " var socket = io.connect( 'http://'+window.location.hostname+':3000' )";// open connection at sender
                    echo 'socket.emit("new_count_message", {  // emit message
                      new_count_message: 145
                    })';
                    $response = array('status' => true, 'message' => 'data dded successfully', 'response' => array());
                } else {
                    $response = array('status' => true, 'message' => 'Failed to add data!');
                }
              $this->response($response);

在接收方:

    var socket = io.connect( 'http://'+window.location.hostname+':3000' );// connection open at receiver
     socket.on( 'new_count_message', function( data ) {
     alert(data.new_count_message);
  
      $( "#new_count_message" ).html( data.new_count_message );
   $('#notif_audio')[0].play();

  });

标签: javascriptphpsocketswebsocket

解决方案


我没有使用socket.iophp,但是我遇到了这个库https://github.com/walkor/phpsocket.io,它允许你实现socket.io在 php.ini 中。遵循“简单聊天”示例应该向您展示如何设置服务器端代码。您的 api 文件中的内容不会打开服务器端连接,而是返回一个从客户端发出数据的网站。因为您没有处理套接字连接的服务器,所以它无法将数据传输到其他套接字。配置好你的服务器端套接字处理程序后,当 API 调用和你的 API 文件中的代码被调用时,客户端会收到一个带有你输出信息的网页。在接收到的数据中,您正在连接到一个套接字并发出数据。然后,服务器将按照我链接的示例在您实现的代码中接收该数据,然后将数据发送到您设置的连接。

或者,与其一开始就进行 API 调用,不如直接发出一条消息呢?这将为您节省网络调用(如果它所做的只是触发套接字,则不需要 API 调用)并且应该使您的应用程序更快。如果不首先了解 API 是如何被调用的,就很难给出确切的实现细节。


推荐阅读