这让我感到沮丧,就像疯了一样!
我正在使用代理,以便任何发送到myurl / APP /的请求由myurl上的node.js回答:8001
我现在需要这个来处理https。容易......我想。
我让Apache从公共文件夹中提供旧版本。这是独立的,当我完成这个,它将被删除。但是现在需要保持机智和可访问性。让我们设置加密。并且https://myurl工作正常,当然显示公用文件夹中的内容。
如果我转到https://myurl:8001,则Chrome会说“无法访问网站”。如果我去http://myurl:8001它工作正常。我认为这是因为https默认端口是443.我有VPS不专用所以我不认为我可以改变它。当然,如果我确实改变了ssl端口,那么它将不适用于公共文件夹??
我将向您展示最新情况;
app.js;
Exec
客户端/ index.html中;
var express = require('express');
var app = express();
var serv = require('http').Server(app);
app.get('/',function(req, res) {
res.sendFile(__dirname + '/client/index.html');
});
app.use('/client',express.static(__dirname + '/client'));
serv.listen(8001);
console.log("Server started.");
var SOCKET_LIST = {};
var io = require('socket.io')(serv,{});
io.sockets.on('connection', function(socket){
socket.id = Math.random();
socket.x = 0;
socket.y = 0;
socket.number = "" + Math.floor(10 * Math.random());
SOCKET_LIST[socket.id] = socket;
socket.on('disconnect',function(){
delete SOCKET_LIST[socket.id];
});
});
setInterval(function(){
var pack = [];
for(var i in SOCKET_LIST){
var socket = SOCKET_LIST[i];
socket.x++;
socket.y++;
pack.push({
x:socket.x,
y:socket.y,
number:socket.number
});
}
for(var i in SOCKET_LIST){
var socket = SOCKET_LIST[i];
socket.emit('newPositions',pack);
}
},1000/25);
它的工作正常,因为代码只是通过http。我需要这个来处理SSL
我需要这条线在其https;
时工作<canvas id="ctx" width="500" height="500" style="border:1px solid #000000;"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script>
<script>
var ctx = document.getElementById("ctx").getContext("2d");
ctx.font = '30px Arial';
var socket = io.connect('http://www.myurl:8001', {path: "/socket.io"});
socket.on('newPositions',function(data){
ctx.clearRect(0,0,500,500);
for(var i = 0 ; i < data.length; i++)
ctx.fillText(data[i].number,data[i].x,data[i].y);
});
</script>
这怎么可能?
非常感谢任何帮助。
答案 0 :(得分:2)
您的服务器代码仅创建一个http服务器,而不是https服务器,因为socket.io使用您的http服务器,它只能在http上运行。 http和https服务器不同(https服务器实现了http服务器不存在的证书验证和数据加密)。
要创建https服务器,请更改此:
var express = require('express');
var app = express();
var serv = require('http').Server(app);
到此:
const express = require('express');
const app = express();
const options = {...}; // fill in relevant certificate info here
const serv = require('https').createServer(options, app);
而且,您必须在options
数据结构中填写相应的certificateinfo。
https.createServer()
代码示例为here。
然后,只要您使用https URL和正确的端口号连接到任何端口,就可以在任何端口上运行https服务器。你是正确的,https URL的默认端口是443,所以如果没有指定端口号,那么浏览器将尝试使用它。
答案 1 :(得分:0)
好吧这有点令人尴尬......我遇到的实际问题是因为以下原因。
如果你能遵循这个大声笑......
因此在dreamhost中,它们允许您以通常的方式运行apache并提供内容。有一个/ public文件夹。相当标准的东西。 因为我试图扩展到能够使用套接字(请不要告诉我使用PHP的套接字......放手吧!)所以我使用的是dreamhost,允许一个人代理一个node.js app通过一个端口。例如。端口xxxx最终在网站上/ whateverfolderyouchoose /
好吧,在我的node.js中,我正在使用快递。现在在快递中你可以指定路由真的很容易。对于一些古怪的原因,我不能为实际找出原因而烦恼,如果你知道请赐教我......我必须在路由中加上双正斜杠,就像这样&#34; // whateverroute /&#34;。我正在学习的所有例子都使用一个正斜杠。例如&#34; / whateverroute /&#34;但那并没有奏效。如果你知道原因,请告诉我们。所以在我弄清楚之前,我无法正确地路由任何东西,因此必须在末尾使用带端口号的url。当然会搞砸https。例如,https://www.theurl.com:xxxx不安全,因为node.js应用程序没有运行https res req服务器。实际上我确实设置了https节点服务器,并认为这是问题的解决方案。
因此,这个奇怪问题的解决方案是node.js路由。当然,愚蠢的复杂因为,当你从谷歌学习而不是真正知道你确切设置的人时,嘿生活就像那样。
结果有趣的是,我不能站在node.js.我可以看到使用它的好处。但是对于像我正在做的那样简单的事情,似乎有很多球疼痛。此外,我现在已经发现手机/差距所以PHP实际上是可以的,我想做什么。好的,所以我使用AJAX请求多次使用服务器方式,但它现在正在处理几百个用户,当它达到10&000; 000标记时,网站可能无法很好地工作,我应该做足以让一个真正的node.js程序员学习....希望。
我非常感谢帮助你们。