php - 使用 PHP 和 Nodejs 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() 函数时,在控制台中说:
加载资源失败:net::ERR_UNKNOWN_URL_SCHEME socket.io.js:1
未捕获的 ReferenceError:io 未在 index.php:97 中定义
我在哪里做错了?
解决方案
你这样做的方式非常接近正确。
此错误与您的文件http://mywebsite:3001/socket.io/socket.io.js
未正确加载这一事实有关,因此io
从未为该变量分配套接字 io 库。
在我看来,您更改了网址而不是显示您的域,但恐怕这正是问题所在。
确保如果您将该网址放在浏览器中,它会将您带到该文件。看起来 url 有一些无效的格式。
推荐阅读
- performance - 执行压力测试时 HTTP 和 HTTPS 之间的区别
- javascript - 单击父元素时的JS函数,但单击子元素时返回false
- flutter - Flutter - 仅扩展扩展高度
- r - R : 在这种情况下如何使用 apply 来加速功能?
- ruby-on-rails - 更新记录时如何防止多次查询?
- android - OkHttp 4.0.0 是否需要 JVM 目标 1.8?
- shell - 批量获取Plink传递的ssh文件中的参数
- reactjs - 动态创建字段的半星评级
- python - 了解如何使用 Google OR 工具设置软约束
- python - Redshift UDF 中 scikit learn 包的导入失败