我有一个带有Socket Io集成的NodeJS应用程序。现在我的网页和应用程序都已实现,但我在执行期间面临一个问题:
以下是我的网页代码:
<script>
$(document).ready(function(){
$("#batch")[0].reset();
var socket = io.connect('http://xx.xx.xxx.xx:xxxx',{'forceNew':true });
socket.on('message', function (data) {
var newtext = data;
document.batch.outputtext.value += newtext;
});
socket.on('end', function (data) {
socket.disconnect();
});
});
</script>
我的NodeJS App:
exec_script = function(resp) {
socket.on('connection', function (client) {
console.log('Connection Established');
client.on('disconnect', function () {
console.log('disconnected');
return;
});
var pyshell = new PythonShell('./test.py', options ={ mode: 'text', pythonOptions: ['-u'] });
pyshell.stdout.on('data', function(data) {
client.emit('message', data);
console.log(data);
});
pyshell.end(function(err) {
if (err) throw err;
console.log('End Script');
client.emit('end', 'end');
client.disconnect();
});
});
};
我面临的问题是,当Python脚本执行时,其输出会发送到浏览器,而我的浏览器状态为&#34;等待xx.xx.xxx.xx&#34;在我的FF中,我看到蓝色圆圈盘旋 - 这很好 - 但即使在Python脚本结束并且套接字明确断开之后,我仍然看到浏览器状态为&#34;等待xx.xx.xxx.xx浏览器标题为连接蓝色圆圈旋转?
我如何成功关闭和结束连接,因为我在浏览器中需要相同的页面,而我不会将用户导航到其他页面?
我尝试使用 response.end(),但我面临的问题是,如果请求数据是以 /今天的形式发布,那么调用 response.end()将浏览器端的网址更改为 http://xx.xx.xxx.xx:xxxx/today ,从而导致出现空白/错误页面,这是我不想要的情况 - 网址应该是保持为 http://xx.xx.xxx.xx:xxxx ?
以下是我调用exec_script方法的方法:
router.post('/', function(req, res) {
methods.process(req, res);
});
exports.process = function(req, resp) {
var bname = req.body['date'];
if(typeof req.body['date'] !== "undefined" && req.body['date'] !== null)
{
exec_script(req, resp);
}
};