php - 使用 PHP 和 Nodejs Socket.io

标签 php node.js websocket socket.io

我在端口 3001 上运行 NodeJS

我的index.php:

  ...
  ...
 <div class="chat">
      <ul id="chat-ul">
        <?php foreach ($msgs as $key): ?>
          <li id="<?= $key['id'] ?>"><b><?=$key['username']?>: </b> <?=$key['message']?></li>
        <?php endforeach; ?>
      </ul>
    </div>
    
    <div class="chat-form">
      <div class="row">
        <div class="col-md-4">
          <button class="btn btn-success" onclick="sendMsg()" type="button" name="button">SEND</button>
        </div>
        <div class="col-md-8">
          <input type="text" name="message" id="message" class="form-control" value="">
        </div>
      </div>
    </div>


<script src="http://mywebsite:3001/socket.io/socket.io.js"></script>
<script type="text/javascript">
var socket = io.connect("http://mywebsite.com:3001");
function sendMsg() {
  socket.emit('send_message', {user:<?= $_SESSION['username']?>, id:0, message:$('#message').val()});
}
socket.on('received_message', (e)=>{
  $('#chat-ul').append(e);
});
</script>

在后端 - server.js:

var express = require('express');
var app = express();
var path = require('path');
var server = app.listen(3001);
var io = require('socket.io').listen(server);

io.sockets.on('connection', (socket)=>{
  console.log('connected'); // connected

  socket.on('disconnect', ()=>{
    console.log('disconnected');
  });
  
  socket.on('send_message', (data)=>{
    let new_data = '<li id='+data.id+'><b>'+data.username+':</b>'+data.message+'</li>'; //connected
    io.sockets.emit('received_message', new_data); })
 
  });

当我尝试运行 sendMsg() 函数时,控制台中显示:

Failed to load resource: net::ERR_UNKNOWN_URL_SCHEME socket.io.js:1

Uncaught ReferenceError: io is not defined at index.php:97

我哪里做错了?

最佳答案

您的做法非常接近正确。

此错误与您的文件 http://mywebsite:3001/socket.io/socket.io.js 未正确加载有关,因此 io 变量从未分配给套接字 io 库。

在我看来,您更改了网址是为了不泄露您的域,但恐怕这正是问题所在。

确保如果您将该网址输入浏览器,它会将您带到该文件。看起来该网址的格式无效。

关于php - 使用 PHP 和 Nodejs Socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54096699/

相关文章:

javascript - Mongodb 查询 ObjectID 返回 null

php - PDO Bind Params 取决于它们是否存在于查询中

php - MySQL 无法添加新记录

JavaScript循环: restore console after each iteration

node.js - 如何遍历所有文件,支持暂停和继续

google-chrome - Websocket 连接错误 资源不足

php - 解密在 GOLang 上用 PHP 解密的 AES-CBC-256 Mcrypt_RIJNDAEL

javascript - 多个选项框同名jquery ajax

javascript - 使用 websockets 通过本地主机连接远程主机

不依赖 C++11 的 C++ websocket 库