gpt4 book ai didi

django - 实现 Django 和 socket.io 协同工作

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:39 24 4
gpt4 key购买 nike

我正在关注这个 tutorial使用 Django 和 Socket.io (node js) 构建实时应用程序。我正在一个 vagrant box 中构建它,并在我的主机文件中配置了 vagrant 机器。现在,由于该教程是一篇旧文章,所以我遇到了很多错误。但是,在修复了一些已弃用的代码之后,这就是它的样子。

聊天.js:

var server = require('http').createServer().listen(4000);
var io = require('socket.io').listen(server, {
'authorization': function(data, accept) {
if (data.headers.cookie) {
data.cookie = cookie_reader.parse(data.headers.cookie);
return accept(null, true);
}
return accept('error', false);
}
});
var cookie_reader = require('cookie');
var querystring = require('querystring');
var redis = require('redis');
var sub = redis.createClient();
sub.subscribe('chat');

io.on('connection', function (socket) {
sub.on('message', function(channel, message){
socket.send(message);
});
socket.on('send_message', function (message) {
values = querystring.stringify({
comment: message,
sessionid: socket.handshake.cookie['sessionid'],
});

var options = {
host: 'localhost',
port: 80,
path: '/node_api',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': values.length
}
};

//Send message to Django server
var req = http.get(options, function(res){
res.setEncoding('utf8');

//Print out error message
res.on('data', function(message){
if(message != 'Everything worked :)'){
console.log('Message: ' + message);
}
});
});

req.write(values);
req.end();
});
});

index.html:

<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script src="{% static "js/socket.io.js" %}"></script>
<script>
$(document).ready(function () {
var socket = io('http://localhost:4000');
socket.on('connect', function () {
console.log("connect");
});
...
...
...
</script>

但是现在当我加载页面时我遇到了这个错误

GET http://localhost:4000/socket.io/?EIO=3&transport=polling&t=LA7JSiV net::ERR_CONNECTION_REFUSED

在 index.html 中我更改了这个

var socket = io('http://localhost:4000');

对此

var socket = io();  

我收到这个错误

GET http://vagrant-box.com/socket.io/?EIO=3&transport=polling&t=LA7NH61 404 (NOT FOUND)

我做错了什么?请帮我解决这个问题。非常感谢您的帮助。谢谢。

最佳答案

首先请注意,您不能从 django 提供 socket.io js,socket.io 必须提供它自己的 js 文件,因为它会使用一些巧妙的魔法来确定它必须发送的文件。

改变

<script src="{% static "js/socket.io.js" %}"></script>

<script type="text/javascript" src="http://localhost:4000/socket.io/socket.io.js"></script>

(您必须在生产环境中更改这些 url)

之后你必须让 socket.io 知道连接到 node.js 服务器的确切模式、主机和端口,否则你将得到 404,因为套接字将尝试连接到你的 django 服务器正在监听的端口。

var socket = io('http://localhost:4000');

关于django - 实现 Django 和 socket.io 协同工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35056302/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com