javascript - 套接字代码在 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();
});
解决方案
我没有使用socket.io
php,但是我遇到了这个库https://github.com/walkor/phpsocket.io,它允许你实现socket.io
在 php.ini 中。遵循“简单聊天”示例应该向您展示如何设置服务器端代码。您的 api 文件中的内容不会打开服务器端连接,而是返回一个从客户端发出数据的网站。因为您没有处理套接字连接的服务器,所以它无法将数据传输到其他套接字。配置好你的服务器端套接字处理程序后,当 API 调用和你的 API 文件中的代码被调用时,客户端会收到一个带有你输出信息的网页。在接收到的数据中,您正在连接到一个套接字并发出数据。然后,服务器将按照我链接的示例在您实现的代码中接收该数据,然后将数据发送到您设置的连接。
或者,与其一开始就进行 API 调用,不如直接发出一条消息呢?这将为您节省网络调用(如果它所做的只是触发套接字,则不需要 API 调用)并且应该使您的应用程序更快。如果不首先了解 API 是如何被调用的,就很难给出确切的实现细节。
推荐阅读
- angular - 使用 angularx-flatpickr 在 Angular 上加载语言环境时出错
- php - 如何避免带有大量换行符的文本?
- swift - 如何保持用户在firebase中的连接?
- ios - retrieveConnectedPeripheralsWithServices 不返回当前连接到系统的设备
- c# - 尝试使用 SaveChanges(实体框架核心)时,作为对象的属性变为空,这是为什么呢?
- android - 自定义异步任务的实现不起作用
- c# - 安装程序项目 - 使用提升的权限启动自定义操作
- javascript - 从 DataTable 中的逗号分隔列填充下拉菜单
- xamarin - F# Fabulous/Xamarin 内存管理,为什么我不能使用(自动处置)这个流?
- javascript - 在 vanilla JS 中的事件处理和 DOM 附加表单时遇到问题